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

如何在Bash脚本中后台运行AWS Session Manager端口转发命令?

AWS Session Manager端口转发后台运行问题解决

问题场景

在Bash脚本中使用AWS Session Manager的端口转发命令时,直接添加&试图让命令后台运行失败,需要让隧道后台持续运行,以便后续执行远程主机命令。

解决方法

1. 处理IO重定向实现后台运行

aws ssm start-session属于交互式命令,直接后台运行会因IO交互问题退出,需重定向标准输入、输出和错误:

aws ssm start-session \
          --target $instance_id \
          --region us-east-1 \
          --reason "Remote tunnel to my service" \
          --document-name serviceTunnel > /dev/null 2>&1 < /dev/null &
  • > /dev/null 2>&1:丢弃标准输出和错误输出
  • < /dev/null:将标准输入绑定到空设备,避免进程因等待输入而退出

2. 用nohup确保进程存活

如果需要脚本退出后隧道仍保持运行,搭配nohup忽略SIGHUP信号(脚本退出时发送给子进程的终止信号):

nohup aws ssm start-session \
          --target $instance_id \
          --region us-east-1 \
          --reason "Remote tunnel to my service" \
          --document-name serviceTunnel > /dev/null 2>&1 < /dev/null &

3. 验证隧道状态与后续命令执行

  • 查看进程确认隧道运行:
ps aux | grep "aws ssm start-session"
  • 等待隧道建立后执行远程命令(以本地转发端口8080为例):
# 启动隧道
nohup aws ssm start-session ... > /dev/null 2>&1 < /dev/null &

# 循环检测端口,最多等待10秒
for i in {1..10}; do
  if nc -z localhost 8080; then
    break
  fi
  sleep 1
done

# 通过转发端口执行远程命令
ssh -p 8080 user@localhost "echo '执行远程任务'"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:25:12