我们在远程主机上有几个脚本,我们使用 ssh 从本地主机触发这些脚本,如下所示。
ssh remuser@remhost sh /web/bin/stop.sh
本周末我们进行了操作系统修补活动,上面的 ssh 命令永远不会返回,感觉像是挂起或等待输入。
可能很难获得有关操作系统应用了哪些补丁的详细信息。
这是 stop.sh 的详细信息
cat stop.sh
exec /usr/bin/java -jar /web/service.jar -DLOG_PATH=/web/logs --server.address=10.23.41.211 --server.port=10500 --spring.profiles.active=dev >> /web/logs/boot.log
exit 0;
首先,我们尝试了此论坛的解决方案,但它没有返回。
ssh remuser@remhost 'sh /web/bin/stop.sh my.jar dev &> /dev/null < /dev/null'
当它冻结并且不返回时的调试输出ssh -vv
如下:
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
debug2: channel 0: rcvd eow
debug2: channel 0: chan_shutdown_read (i0 o0 sock -1 wfd 4 efd 6 [write])
debug2: channel 0: input open -> closed
然后我们尝试了以下操作,ssh 开始返回,但无法在远程主机上运行脚本。
ssh -fN remuser@remhost sh /web/bin/stop.sh my.jar dev
注意:ssh remuser@remhost id
确实返回并且工作正常。其他脚本也可以正常工作。
问题仅在于控制<or <<
权> or >>
返回调用者主机的脚本。
你能建议一下吗?
注意:没有理由调试脚本。它们不是问题的原因,因为所有脚本都不同并且有些非常简单。
答案1
以下内容帮助解决了该问题,现在当脚本在目标主机上执行时控制权又回来了。
ssh -f -n remuser@remhost 'sh -c /web/bin/stop.sh my.jar dev'