通过多个主机的SSH


37

现在,我要在办公室进入我的机器:

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

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


Answers:


31

登录后,可以使用ssh客户端在远程计算机上执行ssh。

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

(我之所以包含-t在调用中,是因为ssh给了我以下错误:当我在自己的计算机上尝试使用stdin时,stdin不是终端;您的计算机可能有所不同。)

当您从最后一个外壳退出时,该过程将链式退出,从而使您不必Ctrl-D一遍又一遍地键入内容。


请注意:仅在远程计算机上登录时,才添加“ -t”。要在远程计算机上启动命令,请不要放置它们,因为它们可能/会损坏某些东西(例如:: tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " 如果添加,可能会损坏-t!例如,请参见StephaneChazelas的精彩答案unix.stackexchange.com/questions/151916/ …
Olivier Dulac

3
使用-J比此答案更安全,因为这样便可以将所有ssh密钥存储在本地计算机上。-J选项是在openssh版本7.3中引入的,如@Miikka的答案中所述
ErikSjölund

1
@ErikSjölundOpenssh不允许使用多个-J选项。我认为您可以ProxyCommand在配置中使用多个选项来实现。
amphetamachine,

1
@amphetamachine -J您可以使用逗号分隔要通过的跃点列表。但是ProxyCommand-W如果碰巧使用的版本太旧而无法支持,则使用with 仍然是比此答案更好的方法-J
kasperd

35

是的,使用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
+1我使用类似的方法通过登台服务器将数据从测试网络推送到产品网络。
Arcege

2
是的,这很棒!
gabe。

15
仅仅为了记录较新版本的ssh支持该-W选项,您可以执行类似的操作ProxyCommand ssh -W %h:%p gateway而不是依靠nc
Ulrich Dangel 2012年

很高兴知道!Thx
亚伦·布朗

2
如果用户名在计算机之间相同,则效果很好。如果有所不同,则必须执行类似操作ProxyCommand ssh -W %h:%p user@gateway
Riccardo Cossu 2013年

9

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

将您希望通过ssh交换的主机作为逗号分隔的列表提供给-J。例如:

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

-5

SSH隧道。我不记得该怎么做,但是我知道有一种方法可以使机器基本上可以通过连接到单独的端口来允许隧道。这样,您只需将外壳安装到同一台初始计算机上(例如,使用不同的端口),它将把您放置在最终位置。

不过,必须查找如何进行配置。

:)


你不想要(也许你不能)打开一个端口或您的大学SSH网关...
斯特凡希门尼斯

9
如果您不知道怎么做,又不愿意查找它,为什么要发布此答案?
amphetamachine

4
不是一个真正的答案
加布。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.