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

Github Actions部署Symfony应用时生产环境SSH认证失败问题求助

Github Actions部署Symfony应用时生产环境SSH认证失败问题求助

首先特别理解你的困惑——明明测试环境能正常跑,生产环境用了完全相同的SSH配置却认证失败,这种“同配置不同结果”的问题确实让人头疼。我结合你的描述梳理了几个针对性的排查方向,你可以逐一尝试:


1. 先统一SSH Action的版本

注意到你的测试环境用的是 appleboy/ssh-action@v0.1.5,但生产环境用的是旧版本 v0.1.4。不同版本的Action可能在密钥解析、passphrase处理逻辑上有差异,这很可能是触发问题的关键。先把生产环境的Action版本改成和测试一致的 v0.1.5,重新触发生产部署试试。

2. 开启SSH调试日志,抓取详细错误信息

在生产环境的appleboy/ssh-action配置里加上debug: true,这样会输出完整的SSH连接调试日志,能帮你精准看到认证失败的具体原因(比如密钥是否被正确识别、passphrase是否匹配、是否存在算法不兼容等)。修改后的生产Action配置片段如下:

uses: appleboy/ssh-action@v0.1.5
with:
  host: ${{ secrets.HOST }}
  port: ${{ secrets.PORT }}
  username: ${{ secrets.USERNAME }}
  key: ${{ secrets.PRIVATE_KEY }}
  passphrase: ${{ secrets.PASSPHRASE }}
  debug: true
  script: cd ${{ secrets.REMOTE_DIR }}/httpdocs && ./deploy.sh

对比测试环境的调试日志,就能快速找到两者的差异点。

3. 查看VPS上的SSH认证日志

直接登录你的VPS,查看SSH服务的认证日志:

  • 如果你用的是Debian/Ubuntu系统,日志路径是 /var/log/auth.log
  • CentOS/RHEL系统则是 /var/log/secure
    搜索包含你Github Actions所用用户名的日志条目,会看到类似Failed publickey for user xxx from xxx port xxx ssh2: RSA SHA256:...的内容,里面会明确说明认证失败的核心原因(比如密钥无效、passphrase错误、算法不支持等)。

4. 再次确认生产环境的Secrets配置完全正确

虽然你说Secrets是同一个,但还是要仔细核对细节:

  • 检查PRIVATE_KEY是否完整复制,有没有丢失换行符(Github Secrets会自动保留换行,但手动粘贴时容易出错)
  • 检查PASSPHRASE有没有大小写错误、多余空格或者特殊字符转义问题
  • 可以临时在测试和生产Action里加一个打印密钥前几行的步骤(注意不要泄露完整密钥!),比如:
- name: Verify key format
  run: |
    echo "${{ secrets.PRIVATE_KEY }}" | head -5

对比两个环境的输出,确保密钥内容完全一致。

5. 检查VPS的sshd_config配置

虽然同一个用户的SSH配置是全局生效的,但还是可以确认一下sshd_config里的关键设置:

  • 确保PubkeyAuthentication yes已开启
  • 检查PubkeyAcceptedAlgorithms是否包含你的RSA密钥对应的算法(比如ssh-rsa)
  • 确认AllowedUsers没有限制该用户的登录权限

按这个顺序排查,应该能很快定位到问题所在。

备注:内容来源于stack exchange,提问作者Geo Daz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:39:52