ssh - Github 操作 - 如何使用 SSH 部署到远程服务器

标签 ssh github-actions

我在 DO 上有一个登台服务器。

我想构建和部署我的节点应用程序。

name: Build & Deploy
on:
  push:
    tags:
      - 'v1.*.0'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Create SSH key
        run: |
          mkdir -p ~/.ssh/
          echo "$DO_GITHUB_PRIVATE_KEY" > ../github_do.key
          sudo chmod 600 ../github_do.key
          ssh-keyscan -H ${{secrets.DEPLOY_SERVER}} > ~/.ssh/known_hosts
        shell: bash
        env:
          DO_GITHUB_PRIVATE_KEY: ${{secrets.DO_GITHUB_PRIVATE_KEY}}
      - uses: actions/setup-node@v1
        with:
          node-version: 12.x
      - name: Install Packages
        run: yarn install --frozen-lockfile
      - name: Build artifacts
        env:
          DEPLOY_SSH_KEY_PATH: ${{ github.workspace }}/../github_do.key
        run: |
          yarn shipit production fast-deploy

我所做的是生成一个新的 SSH 私钥和公钥。

私有(private) 我保存在 DO_GITHUB_PRIVATE_KEY 中的 key github secret 。

公众 我已添加到 authorized_keys 的 key 在我的登台服务器上。

当 Action 被触发时,它会失败:
@ v***.256.0
Create release path "/home/***/***/releases/2020-03-0***-v***.256.0"
Running "mkdir -p /home/***/***/releases/2020-03-0***-v***.256.0" on host "***".
@***-err ***@***: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
'fast-deploy:updateRemote' errored after ***.32 s
Error: Command failed: ssh -i /home/runner/work/***/***/../github_do.key ***@*** "mkdir -p /home/***/***/releases/2020-03-0***-v***.256.0"

最佳答案

我已经解决了!
显然 key 是用密码保护的🤯。
这是整个过程:

  • 生成新 key
  • ssh-keygen -t rsa -b 4096 -C "user@host" -q -N ""
  • 更新主机的authorized_keysssh-copy-id -i ~/.ssh/id_rsa.pub user@host
  • 进入服务器并运行
  • ssh-keyscan host
  • 将输出复制到 github secret(我们称之为 SSH_KNOWN_HOSTS)
  • 将私钥复制到 github secret (我们称之为 SSH_PRIVATE_KEY)

  • 在您的 workflow.yml 文件中
    #workflow.yaml
    ...
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - name: Create SSH key
            run: |
              mkdir -p ~/.ssh/
              echo "$SSH_PRIVATE_KEY" > ../private.key
              sudo chmod 600 ../private.key
              echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
            shell: bash
            env:
              SSH_PRIVATE_KEY: ${{secrets.SSH_PRIVATE_KEY}}
              SSH_KNOWN_HOSTS: ${{secrets.SSH_KNOWN_HOSTS}}
              SSH_KEY_PATH: ${{ github.workspace }}/../private.key
     
    
    然后你可以使用 ssh 和 ssh -i $SSH_KEY_PATH user@host希望这会为某人节省几个小时:]
    编辑
    回复评论(如何更新 github secret )
    为了添加 github secret ,您有 2 个选项:
  • 通过 GitHub 用户界面,https://github.com/{user}/{repo}/settings/secrets/
  • 通过 GitHub API,我正在使用 github-secret-dotenv lib 将我的 secret 与我的本地 .env 同步文件(预操作触发器)
  • 关于ssh - Github 操作 - 如何使用 SSH 部署到远程服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60477061/

    相关文章:

    linux - shell脚本 "expect"ing来自ssh的各种响应

    github-actions - 从特定分支推送时触发 GitHub Action

    linux - 使用 bash 执行 SSH 提示输入密码

    linux - 在 ubuntu 中自定义 ssh 命令

    ssh - 用于 SSH 终端访问的 AWS EC2 : generating private key file out of cert-***. pem

    python - 在 Python/Bash 中通过 SSH/Sudo 测试文件/目录是否存在

    github-actions - git : Using actions/checkout@v2 instead of appleboy/ssh-action@master to clone repository to a server

    github-actions - 如何使用 Azure DevOps 或 GitHub 的 YAML 文件中的文件列表定义变量

    ios - FaSTLane import_certificate 找不到文件

    docker - 使用 Github 操作创建 Docker 容器不会更新 github 包中的包