Github Actions - 使用 SSH 远程连接服务器部署

文档中并没有关于 SSH 方面的东西,虽然不属于 Github Actions 范畴,但经常用到,并且确实要花费一些时间去检索用法,甚至调试很久。

此文是为了记录经过验证的示例代码,方便日后或他人参考和使用。

需求

当 push 代码到仓库时,触发部署流程,在 actions 中通过 ssh 操作远程服务器实现。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
name: deploy

on: [push]

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: init ssh, deploy
run: |
eval $(ssh-agent -s)
echo "${{secrets.SERVER_SSH_PRIV_KEY}}" > deploy.key
mkdir -p ~/.ssh
chmod 0600 deploy.key
ssh-add deploy.key
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
ssh root@${{secrets.SERVER_IP}} "cd /your/workspace/path && sh update.sh "

小结

主要是两个部分:

secrets.SERVER_SSH_PRIV_KEY 是用来访问远程服务器的私钥,具体:

  1. 生成密钥对(见文末参考链接)
  2. 在远程服务器上添加公钥 (将公钥添加到服务器的 ~/.ssh/authorized_keys 文件中)
  3. 在 Github 仓库设置私钥 (Settings > Secrets)

secrets.SERVER_IP 是远程服务器地址;

参考链接