GitHub 操作工作流程错误:ssh:握手失败:ssh:无法进行身份验证,已尝试方法 [无密码],没有保留支持的方法

Alv*_*pez 14 ssh github-actions

标题几乎是不言自明的,ssh 连接失败。我的物理服务器就在我旁边,它位于一个 VPN 下,该 VPN 在 ssh 之前连接。

看起来服务器拒绝用户/密码对,但它在我的计算机上的终端上运行得很好。

sshd_config 文件具有 PasswordAuthentication yes ,我使用service ssh restart重新启动了 ssh 服务。

这是工作流程:

name: Deployment
on:
  push:
    branches: [ master ]
jobs:
  deploy:
    runs-on: ubuntu-20.04
    steps:
      - name: Set up WireGuard
        uses: egor-tensin/setup-wireguard@v1
        with:
          endpoint: ${{ secrets.WIREGUARD_ENDPOINT }}
          endpoint_public_key: ${{ secrets.WIREGUARD_ENDPOINT_PUBLIC_KEY }}
          ips: ${{ secrets.SERVER_IP }}
          allowed_ips: ${{ secrets.WIREGUARD_ALLOWED_IPS }}
          private_key: ${{ secrets.WIREGUARD_PRIVATE_KEY }}
      - name: Deploy to server
        # don't run locally
        if: ${{ !env.ACT }}
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.SERVER_USERNAME }}
          key: ${{ secrets.SERVER_PRIVATE_KEY }}
          port: ${{ secrets.DEPLOY_PORT }}
          script: |
            cd ${{ secrets.PROJECT_PATH }}
            git pull ${{secrets.REPO_URL}}
            docker-compose down 
            docker-compose up --build -d
Run Code Online (Sandbox Code Playgroud)

Ruk*_*ama 10

我遇到了同样的问题,并通过使用本地 pc ssh 私钥而不是远程服务器 ssh 私钥来修复它。

如果您使用 Github Action,您有本地 PC 进行开发,您通过 ssh 访问 Github,并且您有一个要在其中部署代码的远程服务器,以下步骤可能适用于您。

  • 在本地计算机中生成本地 ssh 密钥 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • 将您的私钥内容复制~/.ssh/id_rsa到剪贴板
  • 创建 Github 存储库密钥SSH_PRIVATE_KEY并粘贴您的私钥
  • 将您的公钥内容复制~/.ssh/id_rsa.pub到剪贴板
  • 从本地计算机通过 ssh 连接远程主机。
  • nano ~/.ssh/authorized_keys并将您的公钥粘贴到下一行。如果该文件不存在,您可以创建它。
  • 此时,您应该能够在不提供任何密码的情况下通过 ssh 连接远程主机。你的 Github 操作也应该如此,当使用你的本地私钥时,它的行为必须像你的本地计算机一样appleboy/ssh-action

希望这对某人有帮助,如果您需要更多详细信息,请随时阅读此处的appleboy/ssh-action官方文档。


小智 0

我不确定电线保护部分,但 appleboy/ssh-action@master 需要密钥和密码

      - name: Deploy PROD environment images
    uses: appleboy/ssh-action@master
    if: env.CURRENT_BRANCH == 'master'
    with:
      host:       ${{ secrets.SSH_HOST_PROD }}
      port:       ${{ secrets.SSH_PORT }}
      username:   ${{ secrets.SSH_USERNAME }}
      key:        ${{ secrets.SSH_PRIVATE_KEY }}
      passphrase: ${{ secrets.SSH_PASSPHRASE }}
      script: |
        cd ${{ secrets.PROJECT_PATH }}
        git pull ${{secrets.REPO_URL}}
        docker-compose down 
        docker-compose up --build -d
Run Code Online (Sandbox Code Playgroud)

您可以将这些命令隐藏到脚本中:

#!/bin/bash -x
git pull {LINK_TO_YOUR_REPO} && docker-compose down && docker-compose up --build -d
Run Code Online (Sandbox Code Playgroud)

这样你就会:

  - name: Deploy PROD environment images
uses: appleboy/ssh-action@master
if: env.CURRENT_BRANCH == 'master'
with:
  host:       ${{ secrets.SSH_HOST_PROD }}
  port:       ${{ secrets.SSH_PORT }}
  username:   ${{ secrets.SSH_USERNAME }}
  key:        ${{ secrets.SSH_PRIVATE_KEY }}
  passphrase: ${{ secrets.SSH_PASSPHRASE }}
  script: |
    cd ${{ secrets.PROJECT_PATH }}
    ./your_script
Run Code Online (Sandbox Code Playgroud)