使用deployphp/action部署时SSH认证失败,求助排查方向
GitHub Actions部署时SSH权限拒绝(密钥未被使用)排查方向
问题背景
在GitHub Actions的deploy.yml中配置了以下部署片段:
- name: Deploy uses: deployphp/action@v1 with: private-key: ${{ secrets.PRIVATE_KEY }} dep: deploy ${{ secrets.SSH_HOST }} -o branch=main -o keep_releases=3 -vvv
其中PRIVATE_KEY和SSH_HOST已在GitHub Actions Secrets中定义,但部署日志持续出现SSH权限拒绝错误,核心报错如下:
[***] ***@113.30.151.149: Permission denied (publickey,password).
已通过sshpass-action确认GitHub Actions可登录服务器,且本地使用该私钥登录无问题,但服务器日志显示GitHub Actions尝试用密码而非密钥登录。
排查方向
- 检查私钥格式与完整性:确认Secrets中存储的
PRIVATE_KEY是否完整包含开头的-----BEGIN OPENSSH PRIVATE KEY-----和结尾的-----END OPENSSH PRIVATE KEY-----,且换行符未被自动替换。可在Secrets编辑界面重新粘贴私钥,确保格式完全匹配本地私钥。 - 验证私钥是否被正确加载到ssh-agent:在Deploy步骤前添加调试步骤,执行
ssh-add -l命令查看已加载的密钥列表,确认目标私钥是否存在。示例调试步骤:- name: Check loaded SSH keys run: ssh-add -l - 检查服务器端SSH配置与权限:
- 确认服务器
/etc/ssh/sshd_config中开启公钥认证(PubkeyAuthentication yes),未禁用相关加密算法; - 检查目标用户的
~/.ssh/authorized_keys文件权限必须为600,所属用户和用户组正确,避免权限过宽导致SSH拒绝使用密钥; - 确认服务器防火墙未限制GitHub Actions的IP段访问SSH端口。
- 确认服务器
- 确认deploy命令的主机参数格式:检查
SSH_HOST是否包含完整的用户信息(如deploy_user@113.30.151.149),若仅传递IP,deployphp可能使用默认用户(如runner)登录,而该用户的authorized_keys中未配置对应公钥。 - 检查环境变量传递:确认
SSH_AUTH_SOCK环境变量是否被正确传递到dep命令的执行环境中,避免ssh-agent的密钥代理未生效。 - 排查私钥是否带密码短语:若私钥设置了密码保护,deployphp/action无法自动解锁,需替换为无密码的私钥,或在Action中添加手动解锁私钥的步骤。
内容的提问来源于stack exchange,提问作者baradhili
相关产品推荐
相关产品推荐

