SSH透明跳转到下一台服务器

SSH透明跳转到下一台服务器

是否可以根据用户以某种方式重定向 SSH 连接?

例如我有3台机器proxy,host1,host2

我希望用户 john 登录到代理 (ssh john@proxy_ip) 自动登录到 host1 用户 alice (ssh alice@proxy_ip) 自动登录到 host2

用户不应该知道他们被重定向到哪里。所以 ssh -J john@proxy_ip john@host1 不是一个解决方案

ssh 有这些选项吗?有什么建议么?

答案1

您可以使用自定义“shell”配置代理主机上的每个用户帐户,该“shell”实际上是一个脚本,它将与特定后台主机上的特定用户帐户建立 SSH 连接。

这样的脚本本质上是:

#!/bin/sh
exec ssh ${USER}@hostX  #replace hostX with actual host name here

要将它们设置为 shell,您可能必须在 中列出每个目标主机的脚本/etc/shells,然后将它们分配给代理主机上的用户帐户:

chsh -s /usr/local/bin/ssh-to-host1 john
chsh -s /usr/local/bin/ssh-to-host2 alice

如果这样做,您还应该为代理->hostX 跳转设置 SSH 密钥,或者确保第二个连接无缝地得到验证。

由于这个原因exec,在 ssh 到 hostX 启动后,将没有 shell 进程可以返回,因此当 ssh 会话结束时,用户也会自动从代理中注销。

这并不完美,因为目标主机仍然会显示其实际主机名(除非您拉出“斯巴达克斯”并将其所有主机名设置为与代理主机相同,这可能会导致其他问题)。

答案2

为此,您可以编辑.ssh/config要重定向到的用户帐户。所以/home/alice/.ssh/config看起来像这样:

Host proxy_ip
 User alice
 HostName host2

/home/john/.ssh/config

Host proxy_ip
 User john
 HostName host1

相关内容