GitHub Actions SSH认证失败求助:握手失败无可用认证方法
问题:GitHub Actions通过SSH部署.NET应用时认证失败
错误信息
2024/06/19 02:51:53 ssh: handshake failed: ssh: unable to authenticate, attempted methods [publickey none], no supported methods remain
工作流配置
name: Deploy to Hetzner on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up .NET Core uses: actions/setup-dotnet@v2 with: dotnet-version: '8.0.x' - name: Restore dependencies run: dotnet restore - name: Build run: dotnet publish -c Release -o out - name: Deploy to server uses: appleboy/ssh-action@v0.1.2 with: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | mkdir -p /var/www/meal_prep rm -rf /var/www/meal_prep/* cp -r out/* /var/www/meal_prep sudo -S systemctl restart meal_prep.service
已完成操作
- 本地执行
ssh-keygen -t rsa -b 4096 -C "my_email@example.com"生成SSH密钥对 - 将私钥(
~/.ssh/id_rsa)添加至GitHub仓库密钥SSH_PRIVATE_KEY - 将公钥(
~/.ssh/id_rsa.pub)添加至远程服务器的~/.ssh/authorized_keys文件,本地可无密码SSH登录服务器 - 远程服务器
/etc/ssh/sshd_config中添加CASignatureAlgorithms +ssh-rsa启用ssh-rsa算法
排查与解决方法
1. 检查GitHub Secrets中私钥格式
确保私钥内容完整,包含-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----首尾行,无多余换行或空格,直接复制本地id_rsa文件的全部内容,不要手动修改格式。
2. 修正远程服务器权限
SSH对目录和文件权限要求严格,执行以下命令修正:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chown -R $USER:$USER ~/.ssh
3. 验证sshd_config关键配置
- 确认
PubkeyAuthentication yes已启用(默认开启,检查是否被注释或修改) - 确认
AuthorizedKeysFile .ssh/authorized_keys配置正确 - 修改后重启sshd服务:
sudo systemctl restart sshd
4. 升级ssh-action版本
当前使用的v0.1.2版本较旧,存在兼容性风险,替换为最新稳定版:
uses: appleboy/ssh-action@v1.0.3
5. 查看远程服务器认证日志
通过日志定位具体失败原因,执行:
sudo tail -f /var/log/auth.log
日志会显示密钥不匹配、权限错误等具体细节。
6. 添加指纹验证(可选)
在ssh-action中添加服务器SSH指纹,验证连接目标:
fingerprint: ${{ secrets.SSH_FINGERPRINT }}
指纹可通过远程服务器执行ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub获取。
内容的提问来源于stack exchange,提问作者Rasik
相关产品推荐
相关产品推荐

