appleboy/ssh-action部署Laravel时git pull报No such device or address错误求助
问题根源
报错和你配置的3个GitHub Secrets无关,错误来自部署目标服务器的Git配置:
- 服务器上的项目仓库绑定的远程origin为HTTPS协议地址,执行
git pull时需要交互输入GitHub账号密码,appleboy/ssh-action建立的是非交互SSH会话,无法输入交互信息就会触发该报错。 - 你配置的
SSH_PRIVATE_KEY仅用于GitHub Actions登录你的部署服务器,不具备服务器端拉取GitHub仓库代码的权限。
解决方案
方案一(推荐):切换远程仓库为SSH协议
- 登录部署目标服务器,进入项目目录后执行命令生成SSH密钥对(服务器已有可用SSH密钥可跳过本步):
ssh-keygen -t ed25519 -C "服务器部署密钥" # 全程按回车使用默认配置即可
- 输出公钥内容并完整复制:
cat ~/.ssh/id_ed25519.pub
- 打开对应GitHub仓库的设置页,找到**Deploy keys(部署密钥)**选项,粘贴刚才复制的公钥并保存(不需要勾选写入权限)。
- 回到服务器项目目录,修改远程仓库地址为SSH协议:
git remote set-url origin git@github.com:<你的GitHub用户名>/<你的仓库名>.git
- 服务器上手动执行一次
git pull,确认无需输入任何信息即可拉取成功,后续部署就不会再触发该报错。
方案二:保留HTTPS协议配置凭证
如果不想切换SSH协议,可通过配置GitHub个人访问令牌(PAT)实现免交互拉取:
- 在GitHub账号中生成具备仓库读取权限的个人访问令牌。
- 服务器项目目录执行命令修改远程地址:
git remote set-url origin https://<你的PAT>@github.com/<你的GitHub用户名>/<你的仓库名>.git
额外优化建议
你的部署脚本中php artisan migrate命令在生产环境执行时默认会触发交互确认,非交互环境下会卡住,建议修改为:
php artisan migrate --force
内容的提问来源于stack exchange,提问作者Takhtak Team
相关产品推荐
相关产品推荐

