前言

本博客全网首发了 GitHub Actions 虚拟服务器评测,相信看过的小伙伴其实都很好奇,那些评测截图是怎么做到的?难道是能通过 SSH 连接?这篇文章将告诉你答案。

实际上 GitHub Actions 本身是不允许直接连接进行交互式操作,但有好事的开发者竟然另辟蹊径通过安装 tmate 来实现了 SSH 连接,并且制作了相关的 action 。这使得我们可以非常容易连接到 Actions 的虚拟环境中,相当于免费获得了20台 E5 2vCPU/7G RAM/90G SSD 配置的Linux VPS 和 5台 macOS VPS。

方案一

mxschmitt/action-tmate

第一个实现 tmate 连接 Actions 的 action ,但此方案在退出连接后不能进行到下一个步骤,所以在实际使用中没有多少价值,且极易造成资源浪费,所以只能用于 SSH 连接。不过由于其开天辟地的作用,我决定把它放到第一位。

workflow 文件示例:

name: Ubuntu
on: push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - name: Setup tmate session
      uses: mxschmitt/action-tmate@v1

方案二

csexton/debugger-action

此 action 作者受 mxschmitt/action-tmate 启发,同样是通过 tmate 连接,退出连接后可持续进行下一个步骤,能更好的应用到实际项目中使用。作者可能考虑到为 GitHub 节约资源,默认加了15分钟自动断开连接,不过可以通过执行touch /tmp/keepalive命令去解除。

TIPS: 博主在实际使用中发现,如果一段时间内(大概2分钟左右)不进行任何操作将会失去控制,有可能是 Actions 的限制措施或者是 tmate 本身的问题。

workflow 文件示例:

name: Ubuntu
on: push
jobs:
  Ubuntu:
    runs-on: ubuntu-latest
    steps:
    - name: Setup Debug Session
      uses: csexton/debugger-action@master

方案三

P3TERX/debugger-action

博主在实际使用中觉得以上方案的体验并不理想,于是决定自己开了坑。fork 了csexton/debugger-action 并进行了一些代码细节上的改进,主要解决了连接失去控制的问题。

workflow 文件示例:

name: Ubuntu
on:
  watch:
    types: started
jobs:
  Ubuntu:
    runs-on: ubuntu-latest
    steps:
    - name: SSH connection to Actions
      uses: P3TERX/debugger-action@master

尾巴

GitHub Actions 作为开发者一个小众的服务在经过博主写的一套 OpenWrt 云编译方案后有了一定热度,那么 SSH 连接方法必然会有好事者发现并公布,这就不可避免的会被滥用,这只是迟早的问题。最后经过深思熟虑还是决定把方法直接公布出来。

希望大家以学习研究的目的来使用,切勿用作其它恶意用途。


本博客已开设 Telegram 频道,欢迎小伙伴们订阅关注。