场景如下:用户运行“ssh -i sshkey user@server1”。我希望 SSH 连接通过 server1 隧道传输到 server2。通常,用户可以使用以下命令自行执行此操作:
ssh -i sshkey user@server1 -o 'ProxyCommand /bin/nc server2 22'
但是,我不希望用户自己使用 ssh 命令行参数甚至 ssh_config 更改来设置代理。作为系统管理员,我希望能够透明地将用户的 SSH 会话重定向到其他服务器。到目前为止,我发现的所有解决方案都需要 ProxyCommand。我有什么办法可以实现这一点吗?
请注意,用户使用的是 SSH 密钥,而不是用户名/密码,因此这些凭据需要传递给 server2。
答案1
我想到两种方法来做到这一点:
强制命令在 server1 上的用户AuthorizedKeysFile
(即~/.ssh/authorzied_keys
):
条目看起来像
command="ssh server2" ssh-rsa AAAA...[rest of sshkey.pub]
然后该命令ssh -i sshkey server1
将把用户直接发送到server2。
或者,更改用户的 shell在 server1 上将其设置为类似的内容/bin/proxyshell
,其内容将是:
#!/bin/bash
ssh server2
答案2
我怀疑该问题对SSH的ProxyCommand的使用存在误解。
ProxyCommand 不能用于通过 server1 连接到 server2,但可以通过给定的命令(例如,可能涉及 server2 作为代理)连接到 server1。此命令需要自己的方式对 server2 进行身份验证(例如,参见https://stackoverflow.com/questions/1040089/how-do-i-use-github-through-harsh-proxies了解用于向 Web 代理进行身份验证的各种选项。
如果 ProxyCommand 成功连接到 server1,则用户将以通常的方式在那里进行身份验证。