透明地建立 SSH 连接隧道(无 ProxyCommand)

透明地建立 SSH 连接隧道(无 ProxyCommand)

场景如下:用户运行“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,则用户将以通常的方式在那里进行身份验证。

相关内容