You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell通过ssh连接远程服务器无法获取返回值且执行挂起如何解决

脚本挂起原因
  • 直接执行ssh命令未指定远端运行指令:默认情况下ssh会启动远端服务器的交互式登录会话,持续等待用户输入操作,不会主动退出,因此脚本会卡在该步骤无后续输出。
  • 目录检查逻辑位置错误:原脚本中判断/etc/docker目录是否存在的代码运行在Serv1本地,完全没有在Serv2远端执行,不符合需求设计。
修复方案

将需要在Serv2远端执行的目录检查逻辑作为参数传递给ssh命令,ssh执行完远端指令后会自动断开连接,同时透传远端命令的返回状态给本地,调整后代码如下:

#!/usr/bin/env bash
test_file(){
     echo "Establishing ssh connection with Serv2."
     # 远端执行逻辑通过单引号包裹传入ssh,执行完成后自动断开连接
     sshpass -p pswd ssh uid@serv2 'FILE=/etc/docker
     if [ -d "$FILE" ]; 
     then
       echo "$FILE is a directory."
       exit 0
     else
       echo "Check and try again. Closing the connection from Serv2."
       exit 1
     fi'
     # 直接返回ssh命令的退出状态,即为远端逻辑的返回值
     return $?
}

echo "Execution started from Serv1..."
test_file
retval=$?

if [ "${retval}" -eq 0 ];
then
  echo "Directory is ready"
else
  echo "Directory is not ready."
fi

额外优化建议

非交互场景下使用ssh可以添加如下参数避免交互弹窗,进一步提高脚本稳定性:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null uid@serv2 [执行指令]

内容的提问来源于stack exchange,提问作者Eupheus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:09:03