我的正常流程是这样的:
ssh jumphost
sudo -iHu jump_user
ssh target_user@targethost
Do some task
如何使用 ProxyCommand 执行此操作?我努力了:
ssh target_user@target_host -o ProxyCommand="ssh jumphost 'sudo -iHu jump_user' nc -w 120 %h %p"
但它要求输入密码,因为target_user
用户没有更改为jump_user
on jump_host
。怎么做?我的最终目标是使用它,以便ansible_ssh_common_args
我可以在目标服务器上运行任务。
答案1
在我看来你只需要:
ssh -t jumphost 'exec sudo -iHu jump_user exec ssh target_user@targethost'
ProxyCommand
只为您提供网络连接,但如果您需要打开用户jumphost
,则表明您需要访问jump_user
的私钥,在这种情况下,您确实需要ssh
以该用户身份运行。
最好的办法可能是避免这种情况并添加你的authorized_keys
自己的密钥target_user@targethost
,然后你可以这样做:
ssh -j jump_host target_user@targethost
答案2
.ssh/config
在跳转主机上创建一个文件:
Host targethost
User target_user
或者任何适合您的设置的内容。其他设置(例如保活、代理转发、多路复用等)也可以在此处进行配置,以使您的生活更轻松。
man ssh_config
是您要查阅的文档。
答案3
当我连接到 Jumphost: 时,我会更改用户ssh jumpuser@jumphost
。为此,您需要通过在 Jumphost 中注册公钥来进行设置~jumpuser/.ssh/authorized_keys
。
或者
将私钥从 Jumpuser 复制到 youruser。缺少此密钥是您的用户无法使用 ssh 的唯一解释(导致远程要求输入密码的唯一解释)。