通过代理服务器自动进行 SSH 连接
Automate SSH connection over proxy server
我正在尝试编写一个非常简单的 bash 脚本,因此我可以先通过 ssh 连接到代理服务器,然后从代理服务器通过 ssh 连接到目标服务器。这就是网络被访问的方式。我有:
#! /bin/bash
ssh proxyservername
ssh destservername
这是行不通的。当我连接到proxyserver时,ssh的第二行并没有执行,我还是需要手动输入命令。是否有一些命令可以添加到脚本中,以便我可以自动连接到目标服务器? (我可以接受提示输入密码。)
我认为您需要类似于 ssh proxyservername 'ssh destservername'
的东西,假设 proxyservername
已经安装了对 destservername 的访问权限。
我认为在类似情况下最常见的解决方案是使用 ssh
的 -R
标志(检查 man ssh
)。您可能还想阅读有关 -f
和 -o ExitOnForwardFailure=yes
.
的内容
我使用的模式是这样的:
ssh -f -o ExitOnForwardFailure=yes -R localhost:2222:$TARGETNAME:22 $PROXYNAME sleep 1 &&
ssh -p 2222 localhost
(其中 2222
基本上是您可以在本地计算机上使用的任何端口)。
-R
标志告诉 ssh
连接到 $PROXYNAME
,建立一个从那里到 $TARGETNAME
的端口 22
的隧道并附加它的另一个结束到本地计算机上的端口 2222
。其他选项告诉 ssh
转到后台并在不再使用时关闭此连接。然后你只需启动另一个连接到端口 2222
的 ssh
实例 localhost
.
我正在尝试编写一个非常简单的 bash 脚本,因此我可以先通过 ssh 连接到代理服务器,然后从代理服务器通过 ssh 连接到目标服务器。这就是网络被访问的方式。我有:
#! /bin/bash
ssh proxyservername
ssh destservername
这是行不通的。当我连接到proxyserver时,ssh的第二行并没有执行,我还是需要手动输入命令。是否有一些命令可以添加到脚本中,以便我可以自动连接到目标服务器? (我可以接受提示输入密码。)
我认为您需要类似于 ssh proxyservername 'ssh destservername'
的东西,假设 proxyservername
已经安装了对 destservername 的访问权限。
我认为在类似情况下最常见的解决方案是使用 ssh
的 -R
标志(检查 man ssh
)。您可能还想阅读有关 -f
和 -o ExitOnForwardFailure=yes
.
我使用的模式是这样的:
ssh -f -o ExitOnForwardFailure=yes -R localhost:2222:$TARGETNAME:22 $PROXYNAME sleep 1 &&
ssh -p 2222 localhost
(其中 2222
基本上是您可以在本地计算机上使用的任何端口)。
-R
标志告诉 ssh
连接到 $PROXYNAME
,建立一个从那里到 $TARGETNAME
的端口 22
的隧道并附加它的另一个结束到本地计算机上的端口 2222
。其他选项告诉 ssh
转到后台并在不再使用时关闭此连接。然后你只需启动另一个连接到端口 2222
的 ssh
实例 localhost
.