如何通过 SSH 从 Github Action 执行命令到白名单服务器?

问题描述 投票:0回答:3

我在尝试使用 Github Action 将 CI/CD 应用到我们的项目时遇到了问题。服务器有防火墙,只能访问列出的IP。

我找到了一个使用Github meta api https://api.github.com/meta的方法,但他们拒绝申请。

还有其他方法可以应用这个吗?

我们现在的

ci.yml

name: remote ssh
on:
  push:
    branches: [ master ]

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: execute ssh command via using private key
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.REMOTE_HOST }}
          username: ${{ secrets.REMOTE_USER }}
          key: ${{ secrets.CICD_SSH_KEY }}
          port: ${{ secrets.PORT }}
          script:
            pwd
continuous-deployment github-actions
3个回答
9
投票

就我而言,我使用 OpenVPN 访问服务器。

关于安全。我认为你不应该将文件 VPN 配置加载到 Git。

这是我的配置文件。

name: remote ssh command to deploy
on:
  push:
    branches: [ master ]

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1

      - name: Install Open VPN
        run: |
          sudo apt-get install openvpn
          echo "${{ secrets.VPN_FILE }}" > .github/vpn/config.ovpn

      - name: Connect VPN
        uses: golfzaptw/action-connect-ovpn@master
        id: connect_vpn
        with:
          PING_URL: ${{ secrets.REMOTE_HOST }}
          FILE_OVPN: '.github/vpn/config.ovpn'
        env:
          CA_CRT: ${{ secrets.CA_CRT}}
          USER_CRT: ${{ secrets.USER_CRT }}
          USER_KEY: ${{ secrets.USER_KEY }}

      - name: Check Connect VPN
        run: echo ${{ steps.connect_vpn.outputs.STATUS }}

      - name: Execute ssh command via using private key
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.REMOTE_HOST }}
          username: ${{ secrets.REMOTE_USER }}
          key: ${{ secrets.CICD_SSH_KEY }}
          port: ${{ secrets.PORT }}
          script: |
            pwd
            cd ${{ secrets.REMOTE_TARGET }}
            git pull

      - name: kill vpn
        if: always()
        run: sudo killall openvpn

关注https://github.com/marketplace/actions/connect-vpn#Example-prepare-file-.ovpn

  1. 复制标签内的数据以进行base64编码,然后保存到秘密环境github操作

  2. 删除标签并替换为 ca ca.crt cert user.crt key user.key


0
投票

除了 OpenVPN,您还可以使用 Cloudflare WARP 1.1.1.1,它易于使用,无需运行任何服务器或任何类型的登录。

只是找份工作

name: remote ssh command to deploy
on:
  push:
    branches: [ master ]

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: Check Connect VPN
        run: |
          curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
          echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
          sudo apt update
          sudo apt install cloudflare-warp
          warp-cli --accept-tos register
          warp-cli --accept-tos connect

把这个放在那里。 Boom,您已经准备好去任何地方冲浪了。 注:

  1. 第一行是将 Cloudflare pkg 主机添加到
    apt
    主机列表,因为
    apt
    仅使用 microsoft 托管的 pkg,而且它不在那里。第二行出于同样的原因。
  2. 第五行注册服务。 --accept-tos 部分用于接受 TOS,如果省略则需要人工输入来完成
  3. 第 6 行运行服务。

完整文档在这里:

  1. https://pkg.cloudflareclient.com/install
  2. https://developers.cloudflare.com/warp-client/get-started/linux/

0
投票

我的解决方法是使用自托管的 GitHub 运行程序。
阅读更多这里
自托管运行器只需在您的服务器上设置一个侦听器应用程序,该应用程序将根据来自 GitHub 的事件做出反应,从而无需从 GitHub ssh 进入您的服务器。您的服务器不会让 github 通知您的服务器有新的更改,而是不断检查 Github 是否有任何新更改。


这是用于部署新代码更改的示例 yaml
on:
  push:
    branches: [ "main", "stage" ]

permissions:
  contents: read

jobs:
  deploy-prod:
    runs-on: self-hosted
    if: github.ref == 'refs/heads/main'
    steps:
    - name: Pull Updated Code
      run: |
        cd /home/odoo/odoo && git pull origin main

    - name: Updating Prod Server
      run: |
        export TMPDIR=$HOME/tmp && cd /home/odoo/odoo && sh scripts/update_server.sh

  deploy-stage:
    runs-on: self-hosted
    if: github.ref == 'refs/heads/stage'
    steps:
    - name: Pull Updated Code
      run: |
        cd /home/odoo/stage && git pull origin stage
        
    - name: Updating Stage Server
      run: |
        export TMPDIR=$HOME/tmp && cd /home/odoo/stage && sh scripts/update_server.sh


© www.soinside.com 2019 - 2024. All rights reserved.