使用Deployer+GitHub Actions部署Laravel遇公钥权限拒绝问题求助
解决Deployer + GitHub Actions部署Laravel时的SSH权限拒绝问题
针对你遇到的Permission denied (publickey,keyboard-interactive)错误,结合本地部署正常、GitHub Actions部署失败的情况,可按以下步骤排查修复:
1. 验证GitHub Secrets中的私钥格式
确保PRIVATE_KEY完整包含私钥的首尾标记:
-----BEGIN OPENSSH PRIVATE KEY----- ... 私钥内容 ... -----END OPENSSH PRIVATE KEY-----
- 复制私钥时不要遗漏任何行,避免手动修改换行符
- 可直接从服务器上的
~/.ssh/id_ed25519文件中复制完整内容
2. 检查服务器端公钥与权限配置
- 将生成的公钥(
~/.ssh/id_ed25519.pub)内容添加到目标服务器myusername用户的~/.ssh/authorized_keys文件中 - 严格设置权限:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chmod 755 /home/myusername - 确认服务器
sshd_config配置(/etc/ssh/sshd_config):- 确保
PubkeyAuthentication yes - 确保
PasswordAuthentication no(可选,但能排除密码登录干扰) - 确认
AllowUsers或AllowGroups未限制myusername登录
- 确保
3. 校验KNOWN_HOSTS内容的正确性
重新执行ssh-keyscan命令并复制完整输出到GitHub Secrets的KNOWN_HOSTS:
ssh-keyscan -t ed25519 -p 22342 my.public.server.ip
- 不要手动修改输出内容,确保包含完整的主机密钥条目
4. 添加SSH连接测试步骤(排查关键环节)
在GitHub Actions的Deploy步骤前添加测试步骤,直接验证SSH连通性:
- name: Test SSH Connection to Server run: | # 写入私钥并设置权限 echo "${{ secrets.PRIVATE_KEY }}" > /tmp/deploy_key chmod 600 /tmp/deploy_key # 测试连接 ssh -i /tmp/deploy_key -p 22342 -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" myusername@my.public.server.ip "echo 'SSH Connection Successful'" # 清理密钥 rm /tmp/deploy_key
如果此步骤失败,说明问题出在SSH密钥或服务器配置,而非Deployer本身
5. 检查Deployer配置细节
- 确认
deploy.php中host('production')的hostname、port、remote_user与服务器完全匹配 - 尝试关闭
ssh_multiplexing(你已设置为false,可保留) - 确保Deployer版本兼容(当前用7.1.4,可尝试升级到最新稳定版)
6. 查看服务器SSH日志定位具体原因
登录目标服务器,查看/var/log/auth.log(Ubuntu系统),里面会记录SSH登录失败的具体原因,比如:
- 公钥不匹配
- 权限不足
- 用户登录被拒绝
内容的提问来源于stack exchange,提问作者BigJobbies
相关产品推荐
相关产品推荐

