You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:43:32