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

通过SSH经中间跳转设备执行自动化目录检测命令

跳板机场景下的远程目录检测脚本实现

问题背景

原本使用以下脚本检测单跳场景下目标设备的指定目录是否存在,并获取用户确认:

sshpass -p "$PASS" ssh -t $USER@$IP 'echo '$PASS' | sudo -S [ -d /myFile ]' && echo "INFO: already exists /myFile, continue? [Y/n]" && read RESULT

现在需要适配**本地机器 -> Device_1(跳板机)-> Device_2(目标设备)**的双跳场景,其中:

  • Device_1:IP_1、USER_1、PASS_1
  • Device_2:IP_2、USER_2、PASS_2

要求全程自动登录无需手动输入密码,且能直接对Device_2执行目录检测并触发用户确认流程。已知现有连接命令仅能实现跳转登录,无法直接执行命令:

env SSHPASS="$PASS_2" \
  sshpass -d 123 ssh \
    -o ProxyCommand="sshpass -e ssh -W %h:%p $USER_2@$IP_2" \
  $USER_1@$IP_1 \
  123<<<$PASS_1

解决方案

通过嵌套sshpass和ProxyCommand,将目标命令直接传递到Device_2执行,同时处理两层登录和sudo的密码验证,脚本如下:

# 双跳执行Device_2的目录检测命令
env SSHPASS="$PASS_2" \
sshpass -d 123 ssh -t $USER_1@$IP_1 \
  -o ProxyCommand="sshpass -e ssh -W %h:%p $USER_2@$IP_2" \
  'echo '$PASS_2' | sudo -S [ -d /myFile ]' \
123<<<$PASS_1

# 根据远程命令退出码判断目录是否存在,提示用户确认
if [ $? -eq 0 ]; then
    echo "INFO: /myFile 已存在,是否继续?[Y/n]"
    read RESULT
fi

关键说明

  • 外层sshpass -d 123通过文件描述符123读取PASS_1,自动完成Device_1的登录验证
  • env SSHPASS="$PASS_2"将Device_2的密码注入环境变量,供内层sshpass -e读取,完成Device_2的登录
  • -t参数强制分配伪终端,确保sudo可以正常接收密码输入(避免sudo因无终端报错)
  • 远程命令echo '$PASS_2' | sudo -S [ -d /myFile ]直接在Device_2上执行,检测目录是否存在
  • 通过$?获取远程命令的退出状态:返回0表示目录存在,此时触发用户确认流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:35:23