为了访问我办公室的机器,目前我正在执行以下操作:
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