使用ProxyCommand

使用ProxyCommand

有没有一种方法,用一个命令就能从我的计算机 A 经过计算机 B 到计算机 C 建立 ssh 连接,以便我可以访问计算机 C 上的 shell?

一个问题(似乎排除了使用 -L 选项简单地转发 ssh 连接)是,我有计算机 B 上的帐户密码,并且计算机 B 上的帐户被授权连接到计算机 C 上的帐户,但是我没有计算机 C 上帐户的密码。

答案1

我知道您只是想登录到计算机 C,而不是真正地将任何东西从 A 隧道传输到 C。因此,这应该可以解决问题:

ssh -t computer-b "ssh computer-c"

您可能需要输入两次密码,第一次是计算机 B 的密码,第二次是计算机 C 的密码,但这可以通过使用 ssh 的密钥对身份验证来避免。

答案2

您可能想要使用 SSH 的 ProxyCommand:http://benno.id.au/blog/2006/06/08/ssh_proxy_command

答案3

如果你使用 ssh 密钥,则可以为机器 B 生成一个新密钥,并使用它来从 A 连接到 B。在机器 B 上,你可以添加

command="ssh C" ssh-....

~/.ssh/authorized_keys文件中。这意味着每当您使用该 ssh 密钥连接到 B 时,它都会执行该ssh C命令。

我不知道这是否适用于 scp。

答案4

使用ProxyCommand

请参阅man ssh_config。我建议使用ProxyCommand。让我们来看看你原来的场景:

  • 计算机 A(您的计算机)
  • 计算机 B(代理主机名)
  • 计算机 C(只能通过 SSH 从计算机 B 访问)

编辑~/.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。单台计算机或特定网络内的任何计算机(例如192.168.35.0/24在上面的示例中)通过计算机 B 进行代理。它也可用作别名。

ssh 192.168.35.27

在上面的例子中,它将通过计算机 B 代理来获取 IP 地址。

菊花链代理

使用此方法,您可以根据需要连接任意数量的自动代理。例如,您可以添加一个电脑D它只能从计算机 C 访问,并且它将透明地工作。

Host computerd
    ProxyCommand ssh computerc nc -w 180 %h %p

ssh computerd将自动通过上述ssh_config示例中的计算机 C 和计算机 B 进行代理。

相关内容