首页 > 解决方案 > 远程服务器上的 Shell 脚本终止 ssh 会话

问题描述

我有一个由某个供应商编写的 shell 脚本,并且在底层做了很多我没有特定领域知识的东西。我有一本供应商提供的手册,如何在 CLI 上手动执行此脚本。如果在 CLI 上执行,它将按预期工作。

现在我编写了一个脚本来自动化这个过程,但是当脚本完成时,我的脚本的 ssh 会话将突然终止,并且 ssh 会话中脚本之后的远程命令将不会执行。只有 ssh 会话之外的本地命令将继续。

echo "LOCAL: start"
sshpass -p ${PSSWD} timeout 45 ssh -n -q -oConnectTimeout=10 -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null user@$ip '( 

function executeFlash(){
    echo "remote: executeFlash: start" 
    flash.sh 
    echo "remote: executeFlash: end" 

}

echo "REMOTE: start"
cp flashrom /usr/sbin/
cp libftdi1.so.2 /usr/lib64/
executeFlash
echo "REMOTE: end"

)'
echo "LOCAL: end"

输出是

LOCAL: start
REMOTE: start
remote: executeFlash: start
some logs showing the successful execution of flash.sh
      --- missing remote command for "remote: executeFlash: end" and "REMOTE: end"
LOCAL: end

如上所示,会话似乎已终止,其余远程命令未执行“remote:executeFlash:end” 我曾尝试在子进程中调用脚本,如 flash.sh & 或 ./flash.sh 但没有运气。在 CLI 中手动执行期间,我不会丢失 ssh 会话,这是预期的行为

标签: bashshellromsubshell

解决方案


从 ssh 命令中删除“超时 45”后,问题得到解决


推荐阅读