🏡Welcome to my blog

如何使用github的actions实现ssh连接并deploy

这博客其中一个功能是在github仓库发生更改时自动在服务器pull的功能,

至于怎么实现这个功能,我参考了已下两个网站(感谢作者):

  • https://blog.csdn.net/li528405176/article/details/82810342
  • https://laogen.site/github-actions/ssh-deploy/

首先需要理清的是完成这个操作关系到三台机器, 分别是:

  • A, 自己的电脑(我用的是macOS)
  • B, 执行github的actions的机器
  • C, 实际运行代码的服务器

在下面我将用ABC的代号表示它们

第一步:自己电脑(A)要获得服务器(C)的信任

在A使用以下代码生成密匙:

ssh-keygen -t rsa

你可以在执行此命令后直接按回车,将会: 默认位置放置密匙(/Users/[name]/.ssh/id_rsa), 不设置密匙的密码

然后使用这个来向服务器要求信任:

ssh-add /Users/[name]/.ssh/id_rsa
ssh-copy-id [C的用户名]@[C的ip]

此时要输入C的密码

尝试连接一下服务器C

ssh [C的用户名]@[C的ip]

没被要求输入密码就表示设置成功

将这份信任交给github的actions(B)

1,执行下面命令并复制其内容:

cat /Users/[name]/.ssh/id_rsa

2,把密匙发送到Github仓库的secrets

  • 仓库 -> Settings -> Security -> Secrets -> Actions -> New repository secret
  • Name中填SSH_PRV_KEY 下面的内容中填刚才复制的内容

在C中克隆好仓库

在服务器C中克隆好仓库并复制路径, 注意在服务器要有pull权限,这点有机会再说(github不再支持密码授权)

在B上创建Actions

感谢老根的博文

使用以下的job来创建actions:

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] && sudo git pull "

到此为止就实现了通过actions -> ssh来自动CD了