SSH通过第三台机器

Local Computer (Fedora) --SSH--> Server1 --SSH--> Server2 

在我工作的一些环境中,我们必须使用“跳转盒子”(ssh box),在其中您需要ssh到一个服务器才能到达另一个服务器。 有没有一个快速的方法来做到这一点,也许通过编辑〜/ .ssh / config,这样每当我从本地计算机ssh到Server2,它会自动创build必要的连接到Server1? 我可以设置密钥,以便在必要时不会提示input密码给Server1。

这种types的function被添加到OpenSSH版本5.4中,可以被使用

 ssh -W server2 server1 

其中server2是您的预期目标, server1是您的代理主机。 通过在你的sshconfiguration文件中使用ProxyCommand选项,你可以ProxyCommand这个过程:

 host = *.example.com user = packs port = 22 ProxyCommand ssh -W %h:%p server1 

我也看到它使用netcat完成,所以与上面相同的例子

 ssh server1 nc -q0 server2 22 

同样,这也可以在你的sshconfiguration中使用,除了将ProxyCommandreplace为

 ProxyCommand ssh server1 nc -q0 %h %p 

你可以使用如下命令:

 $ ssh -t user@server1 ssh user@server2 

这个命令通过server1 ssh你到server2。 您将被连续提示input两个密码login到server1,然后login到server2。 如果您设置了所需的SSH密钥,则应该自动login到server2。

当您无法直接login到server2时,这非常有用。

我使用转发的端口:

 # ~/.ssh/config # The jumping-off point Host server1 Hostname blah.sample.com LocalForward 10002 server2:22 LocalForward 10003 server3:22 # Servers behind the jumping-off point, reached by connecting # to the forwarded ports above Host server2 HostKeyAlias server2 Hostname localhost Port 10002 Host server3 HostKeyAlias server3 Hostname localhost Port 10003 

这比ssh -t user@server1 ssh user@server2有几个优点:

  • 多个会话可以通过相同的隧道build立。
  • 您只需要validation每个连接而不是两次。
  • 透明地使用sshscpsftp (例如,你可以scp thisfile server2:~/thatfile而不必做任何额外的操作)。
  • X和端口转发工作,而不必考虑它。