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

Shell脚本中跨服务器ssh命令执行失败,请求排查帮助

解决跨服务器SSH执行脚本时远程命令未找到的问题

你的核心问题是:执行命令ksh /apps/dw/shell_scripts/run_ssh_ec2.sh "bash /apps/dw/etl/shell_scripts/ec2_script_change_log.sh"时,远程EC2实例上的ec2_script_change_log.sh第5行存在未找到的命令,导致SSH执行中止。以下是具体解决步骤:

  • 直接登录远程服务器定位问题命令
    SSH到目标EC2实例,查看脚本第5行的具体内容:

    sed -n '5p' /apps/dw/etl/shell_scripts/ec2_script_change_log.sh
    

    确认这一行的命令是系统工具、自定义脚本还是相对路径命令。

  • 检查命令的可用性与环境变量
    登录远程服务器后,直接执行第5行的命令:

    • 若为系统命令,用which 命令名检查是否安装,未安装则补装对应包;
    • 若为自定义脚本,检查路径是否为绝对路径,避免依赖当前工作目录;
    • SSH远程执行时默认不加载.bashrc/.profile,可能导致PATH不全。可在ec2_script_change_log.sh开头添加PATH配置:
      export PATH=$PATH:/usr/local/bin:/apps/dw/custom_bin
      
      (替换为实际需要的路径)
  • 跳过中间脚本直接测试SSH执行
    先绕过run_ssh_ec2.sh,直接用SSH测试远程脚本:

    ssh 远程用户名@EC2实例IP "bash /apps/dw/etl/shell_scripts/ec2_script_change_log.sh"
    

    如果直接执行正常,再排查run_ssh_ec2.sh中的SSH参数是否存在引号传递、终端模式(如-t)等问题。

  • 添加调试日志定位细节
    在ec2_script_change_log.sh第5行前后加入调试输出:

    echo "当前PATH: $PATH" >> /tmp/script_debug.log
    echo "待执行命令: 这里替换成第5行的命令内容" >> /tmp/script_debug.log
    # 原第5行命令
    echo "命令执行退出码: $?" >> /tmp/script_debug.log
    

    重新执行原命令后,查看/tmp/script_debug.log的内容,进一步定位问题。

内容的提问来源于stack exchange,提问作者Suraj Kumar Saw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:57:41