如何通过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
相关产品推荐
相关产品推荐

