繁体   English   中英

bash-从远程ssh命令捕获退出代码

[英]bash - Capture exit code from remote ssh command

我正在查看在shell脚本中捕获远程ssh命令的退出状态,我有一个shell脚本,如下所示:

function rSSH {
   local x
   echo "Running ssh command"
   x=$(ssh -o StrictHostKeyChecking=no -i $keyPair -o ProxyCommand="ssh -W %h:%p -i $keyPair user@$bastionIP 22" user@$IP "$cmd")

   x=$?
   echo "SSH status is : $x"
   if [ $x -eq 0 ];then
      echo "Success"

   else
      echo "Failure"
      exit 1
   fi
}

rSSH
exit 0

当我以无效的$ bastionIP(测试失败方案)作为后台作业执行上述脚本时,其结果是退出代码为0(而不是1),并且我在日志中看到的唯一信息是第一个回显“ Running ssh命令”,它只是退出脚本。

有人可以指出我做错了什么还是捕获远程ssh命令退出状态的更好方法。 感谢任何帮助。

该脚本似乎正在set -e下运行,这意味着ssh连接失败时,该脚本将立即退出。

面临同样的问题。 我必须通过远程ssh连接执行一堆命令,如下所示,脚本将在“回显”“ return here =”之前终止。

ssh -v -T -i ${KEY} -p${PORT} -tt ${USER}@${IP} /bin/bash -c "'
echo "Inside Script"
exit 12
'"
echo "return here=$?"

感谢原始帖子中@chepner的回复,这是我使用set -e的同一问题

删除它有助于解决。

尝试使用另一个变量作为返回码。

function rSSH {
   local x
   echo "Running ssh command"
   x=$(ssh -o StrictHostKeyChecking=no -i $keyPair -o ProxyCommand="ssh -W %h:%p -i $keyPair user@$bastionIP 22" user@$IP "$cmd")

   local ret_code
   ret_code=$?
   echo "SSH status is : $ret_code"
   if [ $ret_code -eq 0 ];then
      echo "Success"

   else
      echo "Failure"
      exit 1
   fi
}

rSSH
exit 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM