是否可以根据用户以某种方式重定向 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