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
相关产品推荐
相关产品推荐

