无论如何将 sudo 合并到 SSH ProxyCommand 中?

无论如何将 sudo 合并到 SSH ProxyCommand 中?

在工作中,我们有一个SSH跳转主机,需要我们使用sudo sshSSH进入目标主机。像这样的东西:

ssh jump-host
sudo -u sshuser ssh final-host

我正在尝试将其合并到 ProxyCommand 或类似的 SSH 配置设置中,以便我可以运行ssh final-host,但我不确定如何或是否可能。

答案1

不,您不能将远程sudo调用集成到ProxyCommandin你的用例,但你可以 -sinceOpenSSH 7.6(2018 年 10 月)- 使用:

远程命令

指定成功连接到服务器后在远程计算机上执行的命令。命令字符串延伸到行尾,并使用用户的 shell 执行。RemoteCommand接受中描述的令牌的参数代币部分。

.ssh/config因此,您可以像这样输入:

Host finalhost
    RemoteCommand sudo -u sshuser ssh final-host
    RequestTTY yes
    Hostname jumphost

Host jumphost
     User jumpHostUser
     ... Other options for jumphost, if necessary

这仅适用于终端子系统,因此sftp finalhost将使您进入跳转主机, 不是最终主持人git和其他一些工具不能一起使用最终主持人

答案2

为什么没有中继脚本?

在跳转主机上有一个脚本goto.sh

sudo -u $1 ssh $2

在本地主机上有一个脚本jump.sh

ssh jump-host goto.sh my-ssh-user $1

然后,从本地主机,只需做

jump.sh final-host

这是假设

  • 每个本地用户在跳转主机上都有不同的 ssh 用户
  • goto.sh位于跳转主机上的 $PATH 中

答案3

这需要nc在 FinalHost 上安装:

Host finalhost
  proxycommand sudo ssh jumphost ssh finalhost nc localhost 22

首先ssh是跳转主机,然后是最终主机,它将数据通过隧道传输到本地主机的端口 22,这是您的ssh命令随后连接到的端口。

相关内容