使用 ssh 在远程主机上执行脚本不返回

使用 ssh 在远程主机上执行脚本不返回

我们在远程主机上有几个脚本,我们使用 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'

相关内容