Github Actions SSH握手失败:无可用认证方法问题求助
解决SSH认证失败:
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain 1. 检查私钥配置完整性
- 确认Github Secrets中
SSH_PRIVATE_KEY的内容完整:必须包含完整的私钥头-----BEGIN OPENSSH PRIVATE KEY-----、尾-----END OPENSSH PRIVATE KEY-----,中间换行无丢失、无多余空格。 - 若自托管Runner服务器本地存储了私钥文件,确保文件权限为
600,执行命令:chmod 600 ~/.ssh/id_rsa
2. 验证目标服务器公钥配置
- 将生成的公钥(
id_rsa.pub内容)添加到目标服务器对应用户的~/.ssh/authorized_keys文件中。 - 确保
authorized_keys文件权限为600,~/.ssh目录权限为700,执行命令:chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys - 清理
authorized_keys中重复或无效的公钥条目,避免认证冲突。
3. 调整目标服务器SSH服务端设置
- 登录目标服务器,编辑
/etc/ssh/sshd_config,确保以下配置项开启:PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 # 若需要临时测试,可临时开启密码认证,测试完成后再关闭 PasswordAuthentication yes - 重启SSH服务生效:
(不同系统可能使用sudo systemctl restart sshdservice ssh restart命令)
4. 修正Github Actions YAML配置问题
修复缩进错误(YAML对缩进严格)
原配置中存在多处缩进错误,会导致流程逻辑异常,修正后示例:
name: Deploy İşlemi on: push: branches: - main - develop jobs: deploy-main: runs-on: self-hosted if: github.ref == 'refs/heads/main' steps: - name: Checkout repository uses: actions/checkout@v3 - name: SSH Deploy to Main Branch uses: appleboy/ssh-action@master with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} key: ${{ secrets.SSH_PRIVATE_KEY }} port: ${{ secrets.SSH_PORT }} script: | cd x git pull origin main deploy-develop: runs-on: self-hosted if: github.ref == 'refs/heads/develop' steps: - name: Checkout repository uses: actions/checkout@v3 - name: SSH Deploy to Develop Branch uses: appleboy/ssh-action@master with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} key: ${{ secrets.SSH_PRIVATE_KEY }} port: ${{ secrets.SSH_PORT }} script: | cd y git pull origin develop
移除冗余SSH Agent步骤
appleboy/ssh-action可直接使用私钥,无需额外通过webfactory/ssh-agent启动代理,避免环境冲突。
5. 手动测试SSH连接
在自托管Runner服务器上执行手动SSH命令,排除Runner环境外的问题:
ssh -i /path/to/private-key -p $SSH_PORT $SSH_USERNAME@$SSH_HOST
- 若手动连接失败:问题出在密钥对或服务器SSH配置,按前面步骤排查。
- 若手动连接成功:检查Github Secrets的名称拼写是否正确(如
SSH_PRIVATE_KEY是否写错),确认Secrets值未被意外修改。
内容的提问来源于stack exchange,提问作者Mustafa UYSAL
相关产品推荐
相关产品推荐

