我经常会看到类似这样的 ssh 命令:
ssh user1@user2@<one-ip-address>@<second-ip-address
一开始我以为这是通过另一台服务器进行 ssh。但是有几个问题和例子,比如如何使用一个命令通过 B SSH 连接到机器 A?通过 ssh 为服务器提供更好的解决方案。
那么,我的问题是,在什么样的场景下,我们必须使用上述类型的 ssh 命令。ssh 命令的目的地是什么?
答案1
SSH 中有一项功能叫代理跳转:
ssh -J [email protected]:port1,[email protected]:port2 [email protected]
这听起来就像你所指的。
有关更多信息,请参见ProxyJump 第 6 节或这个RedHat 上的 ProxyJump 页面。特别要注意的是,还有其他格式,例如,当每个主机上的 user:passwd 都相同时(不要这样做!)。您还可以将信息放入配置文件中,以避免每次都输入它(尽管history
在那里很有用)。
最后,还有其他方法可以实现相同的功能,在 SSH 中:-o proxycommand=
,以及-q -W
(后者在此处解释解释Shell)。
答案2
正如许多评论所暗示的那样,该语法ssh user1@user2@<one-ip-address>@<second-ip-address
不会导致有用的 ssh 行为,并且与跳转主机功能无关。
请尝试以下操作:
在任何系统上,使用当前用户连接到本地主机:
$ ssh localuser@localhost
正如预期的那样,这将
ssh
在本地主机上打开一个会话现在尝试使用建议的语法进行相同的操作:
$ ssh localuser@localhost@localuser@localhost localuser@localhost@localuser@localhost's password: Permission denied, please try again. ...
系统会要求您输入密码,但系统不会让您进入,因为
localuser@localhost@localuser
系统中不存在该用户。还请检查输出
/var/log/auth.log
:Aug 17 08:45:46 somehost sshd[73042]: Invalid user localuser@localhost@localuser from 127.0.0.1 port 44292 Aug 17 08:45:48 somehost sshd[73042]: pam_unix(sshd:auth): check pass; user unknown Aug 17 08:45:48 somehost sshd[73042]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=127.0.0.1 Aug 17 08:45:50 somehost sshd[73042]: Failed password for invalid user localuser@localhost@localuser from 127.0.0.1 port 44292 ssh2
localuser@localhost@localuser
除非您在想要连接的系统上创建用户,否则此语法将不起作用。