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

如何通过GitHub Workflow SSH连接Azure Linux Web App Service并执行命令

解决Azure Linux Web App在GitHub Workflow中SSH执行命令后挂起的问题

方案1:直接使用az webapp ssh的非交互模式执行命令

默认az webapp ssh会进入交互式会话,这就是导致Workflow卡住的核心原因。你可以通过--command参数直接指定要执行的命令,执行完成后会话会自动退出,不会阻塞后续流程。

示例Workflow步骤:

- name: 通过az webapp ssh执行命令
  run: |
    az webapp ssh \
      --name <你的WebApp名称> \
      --resource-group <你的资源组名称> \
      --command "cd /home/site/wwwroot && ls -l && restart-your-service"

方案2:建立SSH隧道并执行命令(适合复杂场景)

如果需要执行多步操作或复杂脚本,可先建立远程连接隧道,待隧道稳定后再执行命令,最后主动关闭隧道。关键是要等待隧道完全建立后再执行后续SSH操作,避免因隧道未就绪导致失败。

示例Workflow步骤:

- name: 建立SSH隧道并执行命令
  run: |
    # 后台启动远程连接隧道,日志输出到临时文件
    az webapp create-remote-connection \
      --name <你的WebApp名称> \
      --resource-group <你的资源组名称> \
      --port 2222 > tunnel.log 2>&1 &
    
    # 等待隧道建立(最多等待10秒)
    for i in {1..10}; do
      if nc -z localhost 2222; then
        echo "SSH隧道已建立"
        break
      fi
      sleep 1
    done

    # 通过本地端口执行SSH命令,-n避免交互,-t分配伪终端(部分命令依赖)
    ssh -o StrictHostKeyChecking=no -p 2222 root@localhost "
      cd /home/site/wwwroot
      git pull
      npm install
      pm2 restart app
    "

    # 关闭隧道进程,释放资源
    pkill -f "az webapp create-remote-connection"

注意事项

  • GitHub托管的Runner默认已预装az cli和nc(netcat),无需额外安装;自托管Runner需确保这两个工具已部署。
  • Azure Web App的SSH会话默认使用root用户,执行命令无需加sudo。
  • 复杂命令逻辑可写成脚本文件,上传到Web App的文件系统(比如/home/site/scripts/目录),再通过SSH执行:ssh ... "bash /home/site/scripts/your-script.sh"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:27:17