sshpass结合ProxyCommand/ssh -J执行命令无返回结果的解决办法
针对你遇到的通过跳板机使用sshpass自动执行命令却无法获取结果的问题,我这里有个经过验证的解决方案,刚好适配你生产环境4台服务器的场景:
问题回顾
你原本手动执行的跳板机连接命令是正常可用的:
ssh -oProxyCommand="ssh -W %h:%p user@jumphost" user@server "ls"
但当引入sshpass实现密码自动输入时,不管用ProxyCommand还是ssh -J选项,哪怕加上-t参数,都能成功登录跳板机和目标服务器,却拿不到命令执行的输出结果。
可行解决方案
经过测试,给跳板机和目标服务器的连接分别配置一次sshpass就能解决问题,完整命令如下:
sshpass -p password_server ssh -oProxyCommand="sshpass -p password_jumphost ssh -W %h:%p user@jumphost" user@server "ls"
简单解释下逻辑
- 内层的
sshpass -p password_jumphost ssh -W %h:%p user@jumphost:自动输入跳板机的密码,建立起通往跳板机的代理转发通道; - 外层的
sshpass -p password_server ssh ...:自动输入目标服务器的密码,通过已经建好的代理通道连接目标服务器,执行指定命令后就能正常获取输出结果了。
内容的提问来源于stack exchange,提问作者jlengrand




