GitHub Actions SSH密钥未找到:scp-action部署认证失败求助
问题解决:appleboy/scp-action SSH密钥解析失败导致认证错误
核心问题
使用appleboy/scp-action部署应用时,出现ssh.ParsePrivateKey: ssh: no key found错误,最终触发SSH握手失败、认证失败(ssh: unable to authenticate, attempted methods [none], no supported methods remain),已配置完整私钥到GitHub Secrets但无效。
解决方案
1. 确认私钥格式与完整性
- 必须使用PEM格式私钥:以
-----BEGIN RSA PRIVATE KEY-----开头,-----END RSA PRIVATE KEY-----结尾。如果是OpenSSH新格式(-----BEGIN OPENSSH PRIVATE KEY-----),执行以下命令转换:ssh-keygen -p -m PEM -f /path/to/your/private_key - 粘贴到GitHub Secrets时,完整复制私钥所有内容,包括首尾注释行,不要添加多余引号、换行或空格。
2. 验证私钥可用性
在本地用该私钥手动连接服务器,确认私钥本身有效:
ssh -i /path/to/private_key ${USERNAME}@${HOST} -p ${PORT}
如果连接失败,先排查服务器端公钥配置:
- 服务器
~/.ssh/authorized_keys必须包含对应公钥 - 确保文件权限正确:
~/.ssh目录权限700,authorized_keys文件权限600 - 服务器
sshd_config中开启PubkeyAuthentication yes
3. 调整GitHub Actions配置
- 改用稳定版本的
scp-action,避免master分支兼容性问题: - 如果私钥设置了密码,添加
passphrase参数
修改后的示例配置:
name: deploy on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Deploy to Server uses: appleboy/scp-action@v0.1.4 with: host: ${{ secrets.HOST }} port: ${{ secrets.PORT }} username: ${{ secrets.USERNAME }} key: ${{ secrets.KEY }} # 私钥有密码时取消注释 # passphrase: ${{ secrets.PASSPHRASE }} source: "." target: / strip_components: 1
4. 重新配置GitHub Secrets
删除原有的KEY Secrets,重新粘贴格式正确的私钥文本,避免粘贴过程中出现格式截断或乱码。
内容的提问来源于stack exchange,提问作者Pavel
相关产品推荐
相关产品推荐

