SSH 连接到 GitHub Actions 虚拟服务器环境

请注意,本文编写于 177 天前,最后修改于 96 天前,其中某些信息可能已经过时。

前言

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

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

NOTICE: 请勿用于恶意用途,造成的一切后果比如封号、中美关系恶化、原子弹爆炸、第三次世界大战等后果均与作者无关。

方案一

mxschmitt/action-tmate

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

workflow 文件示例:

name: CI
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 并进行了一些改进。比如优化了部分提示文案的显示逻辑,修改连接超时为30分钟,解决了失去控制的问题。后续会持续进行改进,以达到更好的使用体验。

workflow 文件示例:

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


简单使用 | 点击查看

  • 新建仓库
  • 新建 workflow 文件
  • 粘贴代码
  • 点击star
  • 索然无味

尾巴

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

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


关注 GitHub Actions Channel 获得最新情报

相关 TG 群组:GitHub Actions Group


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

添加新评论

已有 4 条评论

為何相當20台呢?

P3TERX P3TERX 回复 @高藥師
0 0

可以同时开20个

大神,我试着新建仓库,黏贴了你的work­flow的代码,点击star后,action确实启动了,但是没有显示怎么ssh上去啊?

P3TERX P3TERX 回复 @蓝精灵
0 0

有时候可能因为网络问题没有显示,2分钟内每30秒会显示一次 SSH 信息,在这个时间内可以尝试刷新,如果超过这个时间了你就重试吧。