Github Actions CI/CD测试工作流执行失败:SSH握手认证问题求助
排查GitHub Actions SSH认证失败问题
我来帮你一步步排查这个SSH握手失败的问题,先从最容易忽略的细节入手:
1. 先修复YAML语法错误
看你的testing.yml配置里,username字段后面多了个逗号:
username: ubuntu,
这个逗号会导致YAML解析异常,SSH客户端实际尝试用的用户是ubuntu,(带逗号),这肯定无法匹配服务器上的用户。先把逗号去掉,改成:
username: ubuntu
2. 验证SSH密钥的有效性
本地测试连接
先在本地用相同的私钥测试连接服务器,确认密钥本身没问题:
ssh -i /path/to/your/private/key ubuntu@server_ip
如果本地连接失败,检查服务器端的配置:
- 服务器上
ubuntu用户的~/.ssh/authorized_keys文件里必须包含对应公钥的完整内容,不能有换行或空格错误。 - 确保
~/.ssh目录权限是700,authorized_keys文件权限是600,权限过松会被SSH服务拒绝:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
确认GitHub Secrets中的密钥
检查仓库的Settings -> Secrets and variables -> Actions里,SSH_KEY这个Secret是否是完整的私钥内容,必须包含开头的-----BEGIN RSA PRIVATE KEY-----和结尾的-----END RSA PRIVATE KEY-----,不能遗漏任何换行。
3. 检查服务器SSH服务配置
登录服务器,编辑/etc/ssh/sshd_config文件,确认以下配置:
PubkeyAuthentication yes(确保公钥认证开启,没有被注释)- 如果
PasswordAuthentication设为no,必须保证公钥认证正常工作;测试阶段可以临时改成yes,用密码连接验证服务器是否可达。
修改后重启SSH服务:
sudo systemctl restart sshd
4. 排查GitHub Actions中的密钥传递
可以在工作流中添加一个调试步骤,确认密钥能被正确读取(注意不要泄露完整密钥):
- name: Debug SSH Key run: echo "${{ secrets.SSH_KEY }}" | head -2 if: always()
如果输出能显示私钥的开头行,说明密钥传递正常;如果没有输出,检查Secret的名称是否完全匹配(大小写敏感)。
5. 使用稳定版本的ssh-action
你当前使用的是appleboy/ssh-action@master,master分支可能包含未稳定的更新,建议换成固定的稳定版本,比如:
uses: appleboy/ssh-action@v0.1.10
按照以上步骤逐一排查,应该能解决这个认证失败的问题。
内容的提问来源于stack exchange,提问作者MD Nasirul Islam
相关产品推荐
相关产品推荐

