通过多个主机进行 ssh

通过多个主机进行 ssh

为了访问我办公室的机器,目前我正在执行以下操作:

me@home:~$ ssh unix.university.com
me@unix:~$ ssh unix.department.univeristy.com
[email protected]:~$ ssh office-machine.department.university.com
me@office-machine:~$ echo "This is very annoying"

有没有一种简单的方法可以自动化这个过程,也许我可以在最后使用一个命令?

答案1

是的,有一个很好的方法可以使用 ssh ProxyCommand 和 netcat 来做到这一点

将类似的内容放入您的 .ssh/config 中

Host *.department.university.com
User me
ForwardAgent yes
ProxyCommand ssh unix.university.com nc %h %p

这将使用跳转/堡垒主机 unix.university.com 直接登录到任何 .department.university.com 服务器。您可能还需要直接unix.university.com 的节。

这是一个解释其工作原理的链接:http://backdrift.org/transparent-proxy-with-ssh

使用这种技术,您现在可以编写

ssh unix.department.university.com

这一切都会显得直接。 rsync、scp 等工具(ssh 堆栈中的任何内容)也将透明地工作。

答案2

您可以使用ssh客户端在登录后在远程机器上执行ssh。

ssh -t unix.university.com \
    ssh -t unix.department.univeristy.com \
    ssh -t office-machine.department.university.com

(我包含在调用中的原因-t是因为当我在自己的机器上尝试时,ssh 给了我错误:stdin 不是终端;你的机器可能不同。)

当您从最后一个 shell 退出时,该进程将链式退出,从而节省您Ctrl-D一遍又一遍的输入。

答案3

在OpenSSH 7.3中,ssh添加了-J命令行标志和相应的ProxyJump配置选项来解决这个问题。

将您希望通过 ssh 连接的主机以逗号分隔列表的形式提供给-J。例如:

ssh -J unix.university.com,unix.department.university.com  \
  office-machine.department.university.com

答案4

使用相同的用户名从服务器 A ssh 到服务器 B

Host target
  HostName <serverB_hostname>
  ForwardX11Trusted yes
  LogLevel verbose
  User <username>
  ProxyCommand ssh <username>@<serverA_hostname> -W %h:%p

相关内容