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

使用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. 检查服务器端公钥与权限配置

  1. 将生成的公钥(~/.ssh/id_ed25519.pub)内容添加到目标服务器myusername用户的~/.ssh/authorized_keys文件中
  2. 严格设置权限:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    chmod 755 /home/myusername
    
  3. 确认服务器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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:15