GitHub Actions SSH握手失败:本地可连接但CI认证失败求助
SSH认证失败排查(GitHub Actions + Plesk环境)
问题背景
本地通过ssh -i ~/.ssh/directus-key user@ip可正常登录服务器,但GitHub Actions使用appleboy/ssh-action执行部署时,出现以下认证失败错误:
2025/04/06 10:26:54 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
已尝试重新生成SSH密钥对、更换服务器用户、切换runs-on环境,均未解决问题。服务器使用Plesk管理,配置了域名独立用户。
排查与解决步骤
1. 强制修正服务器端.ssh目录及文件权限
SSH对权限要求严格,错误的权限会直接导致公钥认证失败。执行以下命令(替换your-plesk-user为实际域名用户):
chown -R your-plesk-user:your-plesk-user /var/www/vhosts/example.com/.ssh chmod 700 /var/www/vhosts/example.com/.ssh chmod 600 /var/www/vhosts/example.com/.ssh/authorized_keys
2. 验证GitHub Secrets中私钥的格式完整性
确保SSH_PRIVATE_KEY完整包含:
- 开头的
-----BEGIN RSA PRIVATE KEY----- - 结尾的
-----END RSA PRIVATE KEY----- - 所有换行符未丢失
粘贴私钥到GitHub Secrets时,直接复制本地私钥文件的完整内容,不要手动修改格式或删除换行。
3. 检查服务器sshd_config配置
编辑/etc/ssh/sshd_config,确认以下配置:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys # 如果配置了AllowUsers,确保包含你的Plesk域名用户 # AllowUsers your-plesk-user other-users
修改后重启sshd服务:
systemctl restart sshd
4. 查看服务器认证日志定位具体原因
查看服务器的认证日志,获取更详细的失败信息:
- Debian/Ubuntu:
tail -f /var/log/auth.log - CentOS/RHEL:
tail -f /var/log/secure
日志中会明确提示失败原因,比如密钥格式错误、权限不足、用户未被允许等。
5. 调整GitHub Actions的ssh-action参数
移除脚本中打印私钥的代码(避免格式干扰),若私钥设置了密码,需添加passphrase参数:
- name: Deploy to Server via SSH uses: appleboy/ssh-action@v1.0.3 with: debug: true host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} # 若私钥有密码,取消注释下面一行 # passphrase: ${{ secrets.SSH_PASSPHRASE }} script: | whoami hostname -I cd /var/www/vhosts/example.com/directus.example.com git pull docker compose up -d
6. 确认Plesk用户的Home目录路径
本地登录服务器后执行echo $HOME,确认Plesk用户的实际Home目录,确保authorized_keys放在了该目录下的.ssh文件夹中(部分Plesk环境下用户Home目录可能不是/var/www/vhosts/example.com)。
内容的提问来源于stack exchange,提问作者MrJoky
相关产品推荐
相关产品推荐

