ssh - Github 操作 - 如何使用 SSH 部署到远程服务器
问题描述
我在 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 私钥和公钥。
我保存在github secret 中的私钥。DO_GITHUB_PRIVATE_KEY
我在登台服务器上添加的公钥。authorized_keys
当动作被触发时,它会失败:
@ 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"
解决方案
我已经解决了!显然密钥是用密码保护的。
这是整个过程:
- 生成新密钥
ssh-keygen -t rsa -b 4096 -C "user@host" -q -N ""
更新主机的
authorized_keys
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
进入服务器并运行
ssh-keyscan host
- 将输出复制到 github secret(我们称之为 SSH_KNOWN_HOSTS)
- 将私钥复制到 github 机密(我们称之为 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
然后你可以使用 sshssh -i $SSH_KEY_PATH user@host
希望这会为某人节省几个小时:]
编辑
回复评论(如何更新 github 机密)
为了添加 github 机密,您有 2 个选项:
- 通过 GitHub 用户界面,https://github.com/ {user}/{repo}/settings/secrets/
- 通过 GitHub API,我使用github-secret-dotenv lib 将我的秘密与我的本地
.env
文件同步(预操作触发器)
推荐阅读
- powerbi - 使用过滤器计算四分位数 - POWER BI
- html - ::after 的 CSS 样式与 plus(+) 选择器
- javascript - Discord.js V13 欢迎消息
- html - 如何让图像适合视口?
- linux - 在 bazel 测试 C++ gtest 中,如何为每个 TEST_P 参数创建一个沙箱,以便查看它们的内容?
- objective-c - NSView 绘图和 IsFlipped 叠加图像
- kendo-ui - 具有服务器绑定的 Kendo UI 网格不会在 DetailTemplate 中显示网格
- html - 我将如何循环播放此动画?
- sql - 如何有效地将多对多关系查询到集合实体响应中?
- java - 如何替换字符串中的“x”并等同于数字?