sanity Asked: 2009-08-26 05:13:45 +0800 CST2009-08-26 05:13:45 +0800 CST 2009-08-26 05:13:45 +0800 CST 在单个命令中通过中间机器建立 ssh 连接 772 有没有办法在单个命令中建立从我的计算机 A 通过计算机 B 到计算机 C 的 ssh 连接,以便我可以访问计算机 C 上的 shell? 一个皱纹(似乎排除了简单地使用 -L 选项转发 ssh 连接)是我有计算机 B 上帐户的密码,并且计算机 B 上的帐户被授权连接到计算机 C 上的帐户,但是我没有计算机 C 上帐户的密码。 ssh tunneling 4 个回答 Voted Best Answer af. 2009-08-26T05:19:42+08:002009-08-26T05:19:42+08:00 我知道你只想登录到计算机 C,而不是真正从 A 到 C 的任何东西。所以,这应该可以解决问题: ssh -t computer-b "ssh computer-c" 您可能需要输入两次密码,首先是计算机 B,然后是计算机 C,但这可以通过使用 ssh 的密钥对身份验证来避免。 Amandasaurus 2009-08-26T05:37:58+08:002009-08-26T05:37:58+08:00 您可能想使用 SSH 的 ProxyCommand:http ://benno.id.au/blog/2006/06/08/ssh_proxy_command Amandasaurus 2009-08-26T06:20:54+08:002009-08-26T06:20:54+08:00 如果您使用 ssh 密钥,您可以为机器 B 生成一个新密钥,并使用该密钥从 A 连接到 B。在机器 B 上,您可以添加 command="ssh C" ssh-.... 在~/.ssh/authorized_keys文件中。这意味着每当您使用该 ssh 密钥连接到 B 时,它都会执行该ssh C命令。 我不知道这是否适用于scp。 Sam Gleske 2016-07-25T21:59:49+08:002016-07-25T21:59:49+08:00 利用ProxyCommand 见man ssh_config。我建议使用ProxyCommand. 让我们以您的原始场景为例: 计算机 A(您的计算机) 计算机 B(代理主机名) 计算机 C(只能通过计算机 B 的 SSH 访问) 编辑~/.ssh/config以下内容。 Host computerb HostName <hostname or IP of Computer B> Host computerc 192.168.35.* ProxyCommand ssh computerb nc -w 180 %h %p 现在您将能够透明地访问计算机 C。例如 ssh computerc 这种方法的优点 更安全 您只需要您的私钥在计算机 A(您的计算机)上。该nc命令将充当代理,SSH 将通过该代理加密流量。这包括身份验证。将您的私钥分发到多个服务器是一个非常糟糕的主意(因为任何带有您的私钥的受感染服务器最终都会损害您的私钥)。 匹配多个目的地 一个可以匹配多个目标计算机使用Host. 通过计算机 B 代理的单个计算机或特定网络中的任何计算机(例如192.168.35.0/24在上面的示例中)。它也用作别名。 ssh 192.168.35.27 在上面的示例中,它将通过计算机 B 代理以获取 IP 地址。 菊花链代理 使用这种方法,您可以根据需要菊花链式连接尽可能多的自动代理。例如,您可以添加只能从计算机 C 访问的计算机 D,并且它将透明地工作。 Host computerd ProxyCommand ssh computerc nc -w 180 %h %p ssh computerd在上述ssh_config示例中,将自动通过计算机 C 和计算机 B 进行代理。
我知道你只想登录到计算机 C,而不是真正从 A 到 C 的任何东西。所以,这应该可以解决问题:
您可能需要输入两次密码,首先是计算机 B,然后是计算机 C,但这可以通过使用 ssh 的密钥对身份验证来避免。
您可能想使用 SSH 的 ProxyCommand:http ://benno.id.au/blog/2006/06/08/ssh_proxy_command
如果您使用 ssh 密钥,您可以为机器 B 生成一个新密钥,并使用该密钥从 A 连接到 B。在机器 B 上,您可以添加
在
~/.ssh/authorized_keys
文件中。这意味着每当您使用该 ssh 密钥连接到 B 时,它都会执行该ssh C
命令。我不知道这是否适用于scp。
利用
ProxyCommand
见
man ssh_config
。我建议使用ProxyCommand
. 让我们以您的原始场景为例:编辑
~/.ssh/config
以下内容。现在您将能够透明地访问计算机 C。例如
这种方法的优点
更安全
您只需要您的私钥在计算机 A(您的计算机)上。该
nc
命令将充当代理,SSH 将通过该代理加密流量。这包括身份验证。将您的私钥分发到多个服务器是一个非常糟糕的主意(因为任何带有您的私钥的受感染服务器最终都会损害您的私钥)。匹配多个目的地
一个可以匹配多个目标计算机使用
Host
. 通过计算机 B 代理的单个计算机或特定网络中的任何计算机(例如192.168.35.0/24
在上面的示例中)。它也用作别名。在上面的示例中,它将通过计算机 B 代理以获取 IP 地址。
菊花链代理
使用这种方法,您可以根据需要菊花链式连接尽可能多的自动代理。例如,您可以添加只能从计算机 C 访问的计算机 D,并且它将透明地工作。
ssh computerd
在上述ssh_config
示例中,将自动通过计算机 C 和计算机 B 进行代理。