我正在考虑在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),我在日志中看到的唯一信息是第一个回显“运行ssh命令”,它只退出脚本。
有人可以指出我做错了什么或更好的方法来捕获远程ssh命令的退出状态。 感谢任何帮助。
答案 0 :(得分:3)
该脚本似乎在set -e
下运行,这意味着当ssh
连接失败时,脚本会立即退出。
答案 1 :(得分:2)
面临同样的问题。我必须在远程ssh连接上执行一堆命令,如下所示,脚本将在'echo'ing'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
删除它有助于解决问题。
答案 2 :(得分:-1)
尝试使用另一个变量作为返回码。
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