如何强制关闭ssh连接是目标服务器上的命令永远不会返回

如何强制关闭ssh连接是目标服务器上的命令永远不会返回

rpm -qa grep httpd我有一个自动化工具,可以生成并执行在目标主机 10.9.100.67 上触发的以下命令。

ssh -vvv -o StrictHostKeyChecking=no -o 'IdentityFile="/app/ssh_keys/id_rsa"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="root"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ConnectTimeout=8 10.9.100.67 'rpm -qa | grep httpd' 

注意:上面的 ssh 连接命令工作正常,我能够成功从 10.9.50.20(源)连接到目标主机 10.9.100.67

问题出在服务器 10.9.100.67 上。如果我们登录到 10.9.100.67 服务器并启动它,它 rpm -qa | grep httpd就会挂起,甚至Ctrl+C在我的 putty shell 上也没有帮助。没有其他选择,只能终止 Putty 会话。

这篇文章的要求不是解决rpm -qa | grep httpd10.9.100.67 上的挂起问题;但我需要的是,ssh如果命令在 5 分钟内未响应失败或成功,则我需要在 10.9.50.20 上关闭与目标 10.9.100.67 的连接。

我什至尝试了命令超时选项,但 ssh 控制没有返回源。

ssh -vvv -o StrictHostKeyChecking=no -o 'IdentityFile="/app/ssh_keys/id_rsa"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="root"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ConnectTimeout=8 10.9.100.67 'timeout 5s rpm -qa | grep httpd' 

注意:-o ConnectTimeout=10没有帮助,ssh 永远不会从 10.9.100.67 返回到 10.9.50.20,这正是我们想要的。

以下命令来自 stackoverflow 帮助,但不适用于 AiX 系统,因为 pkill 不存在。

ssh 10.9.100.67 '( sleep 60 && kill -9 0 ) 2>/dev/null & rpm -qa | grep httpd; RC=$? ; sleep 1 ; pkill -P $! ; exit $RC'

您能提供同样适用于 AIX 的解决方案吗?

答案1

如果您只想rpm -qa | grep httpd在远程主机上运行,​​还有一个替代解决方案,有一个工具sshpass。您可以参考此链接进行安装和常用使用。

https://www.howtoing.com/sshpass-non-interactive-ssh-login-shell-script-ssh-password/

相关内容