卧槽!竟然可以直接白嫖 Github Action 的 2C7G 服务器!
GitHub Actions[1] 是 GitHub 的持续集成服务[2],于2018年10月推出[3]。它的功能非常强大,每一个 action
都用来执行一种操作,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。将这些 actions
组合起来,就是一个持续集成的过程。当然,这些 actions 都共享在 GitHub 的代码仓库中,我们可以直接引用。
Github Actions 提供了整套服务器环境,服务器规格为:
2-core CPU
7 GB RAM 内存
84 GB SSD 硬盘空间
详细系统环境信息如图:
当然,可使用的系统除了 Ubuntu
之外还可以使用 Windows Server 2019
和 macOS X Catalina 10.15
。
看起来很美好,但实际上 GitHub Actions 本身是不允许直接连接进行交互式操作的,也就是说你无法通过 SSH 来连接服务器。如果有办法能够直接连接到服务器进行交互式操作,那岂不是相当于白嫖了一台或多台 E5 2vCPU/7G RAM/90G SSD 配置的 VPS?
本文就来告诉你如何通过一些奇技淫巧来绕过 GitHub Actions 本身的限制,直接连接到服务器!
注意:请勿用于恶意用途,造成的一切后果比如封号、中美关系恶化、原子弹爆炸、第三次世界大战等后果均与作者无关。
方案一
mxschmitt/action-tmate[4]
这是第一个实现 tmate[5] 连接 Actions 服务器的 action ,但此方案在退出连接后不能进行到下一个步骤,所以在实际使用中没有多少价值,只能用于 SSH 连接。不过由于其开天辟地的作用,我决定把它放到第一位。
workflow 文件示例:
name: CI
on: [push]
jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Setup tmate sessionuses: mxschmitt/action-tmate@v2
方案二
csexton/debugger-action[6]
此 action 作者受 mxschmitt/action-tmate[7] 启发,同样是通过 tmate 连接,退出连接后可持续进行下一个步骤,能更好的应用到实际项目中使用。作者可能考虑到为 GitHub 节约资源,默认加了 15 分钟自动断开连接,不过可以通过执行 touch /tmp/keepalive
命令去解除。
workflow 文件示例:
name: debugger-action
on: watch:types: started
jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Setup Debug Sessionuses: csexton/debugger-action@master
Action 日志输出:
方案三
该方案没有使用 action 来实现,而是另辟蹊径,直接使用 ngrok 来穿透内网,脚本如下:
#!/bin/bashif [[ -z "$NGROK_TOKEN" ]]; thenecho "Please set 'NGROK_TOKEN'"exit 2
fiif [[ -z "$USER_PASS" ]]; thenecho "Please set 'USER_PASS' for user: $USER"exit 3
fiecho "### Install ngrok ###"wget -q https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-386.zip
unzip ngrok-stable-linux-386.zip
chmod +x ./ngrokecho "### Update user: $USER password ###"
echo -e "$USER_PASS\n$USER_PASS" | sudo passwd "$USER"echo "### Start ngrok proxy for 22 port ###"rm -f .ngrok.log
./ngrok authtoken "$NGROK_TOKEN"
./ngrok tcp 22 --log ".ngrok.log" &sleep 10
HAS_ERRORS=$(grep "command failed" < .ngrok.log)if [[ -z "$HAS_ERRORS" ]]; thenecho ""echo "=========================================="echo "To connect: $(grep -o -E "tcp://(.+)" < .ngrok.log | sed "s/tcp:\/\//ssh $USER@/" | sed "s/:/ -p /")"echo "=========================================="
elseecho "$HAS_ERRORS"exit 4
fi
该脚本用来为 SSH
服务建立 TCP
隧道,并打印出通过公网连接远程服务器的命令。
首先需要在 ngrok 的官网[8] 注册一个账户,并生成一个Tunnel Authtoken:https://dashboard.ngrok.com/auth。然后创建如下的 workflow:
name: Debugging with SSH
on: push
jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v1- name: Try Buildrun: ./not-exist-file.sh it bloke build- name: Start SSH via Ngrokif: ${{ failure() }}run: curl -sL https://gist.githubusercontent.com/retyui/7115bb6acf151351a143ec8f96a7c561/raw/7099b9db76729dc5761da72aa8525f632d8875c9/debug-github-actions.sh | bashenv:# After sign up on the https://ngrok.com/# You can find this token here: https://dashboard.ngrok.com/get-started/setupNGROK_TOKEN: ${{ secrets.NGROK_TOKEN }}# This password you will use when authorizing via SSH USER_PASS: ${{ secrets.USER_PASS }}- name: Don't kill instaceif: ${{ failure() }}run: sleep 1h # Prevent to killing instance after failure
服务器存活时间默认是 1 小时,可自行调整。这里面的 TOKEN 和 SSH 登录密码最好采用 workflow 中推荐的方式,先在 GitHub 中创建 Secret,然后在 workflow 中引用 Secret。具体步骤可参考官方文档[9]。
Action 日志输出:
最后再次强调:希望大家以学习研究目的来使用,切勿用作其他恶意用途,切勿滥用!
参考资料
SSH 连接到 GitHub Actions 虚拟服务器环境 [10]
参考资料
[1]
GitHub Actions: https://github.com/features/actions
[2]
持续集成服务: http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html
[3]
推出: https://github.blog/changelog/2018-10-16-github-actions-limited-beta/
[4]
mxschmitt/action-tmate: https://p3terx.com/go/aHR0cHM6Ly9naXRodWIuY29tL214c2NobWl0dC9hY3Rpb24tdG1hdGU=
[5]
tmate: https://github.com/tmate-io/tmate
[6]
csexton/debugger-action: https://p3terx.com/go/aHR0cHM6Ly9naXRodWIuY29tL2NzZXh0b24vZGVidWdnZXItYWN0aW9u
[7]
mxschmitt/action-tmate: https://p3terx.com/go/aHR0cHM6Ly9naXRodWIuY29tL214c2NobWl0dC9hY3Rpb24tdG1hdGU=
[8]
ngrok 的官网: https://ngrok.com/
[9]
官方文档: https://docs.github.com/cn/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets
[10]
SSH 连接到 GitHub Actions 虚拟服务器环境 : https://p3terx.com/archives/ssh-to-the-github-actions-virtual-server-environment.html
往期推荐
RocketMQ 消息丢失场景及解决办法
美国 AI 战机击败人类空军飞行员
IntelliJ IDEA 2020.2.1 发布,Lombok插件可能被官方支持
美国如果把根域名服务器封了,中国会从网络上消失?
10分钟搞定 Java 并发队列
星球限时拼团优惠进行中
我的星球是否适合你?
点击阅读原文看看我们都聊过啥?
卧槽!竟然可以直接白嫖 Github Action 的 2C7G 服务器!相关推荐
- 卧槽!竟然可以直接白嫖 Github Action 的 2C7G 服务器。。
GitHub Actions[1] 是 GitHub 的持续集成服务[2],于2018年10月推出[3].它的功能非常强大,每一个 action 都用来执行一种操作,比如抓取代码.运行测试.登录远程服 ...
- 白嫖github的Action做定时任务
自从用了replit搭建免费云服务器,目前的"云主机"对我而言是个伪需求.但是replit有个缺点,空闲一段时间就会休眠,这点很烦人.于是想,要谁能定时请求唤醒一下多好.想到了gi ...
- 故事要从我白嫖了一个阿里云服务器说起
故事要从我白嫖了一个阿里云服务器说起 前情提要:阿里云的高校大学生免费试用6个月服务器.(传送门https://developer.aliyun.com/adc/student https://dev ...
- 白嫖Github和CDN,播放一个远程视频
前言 我用手机录制了一段视频,准备用exoplayer进行播放,当我准备将mp4文件放入工程时我发现文件太大了,这样app体积会很大,于是我找了个办法,把文件放到网上,但是我发现除了上传视频网站发布我 ...
- 我是如何白嫖 Github 服务器自动抓取每日必应壁纸的?
如何使用 Github 服务器自动抓取必应搜索的每日壁纸呢? 如果你访问过必应搜索网站,那么你一定会被搜索页面的壁纸吸引,必应搜索的壁纸每日不同,自动更换,十分精美.这篇文章会介绍如何一步步分析出必应 ...
- 【GitHub学生包优惠申请】学生党“白嫖”GitHub攻略2022年6月
[GitHub学生包优惠申请]震惊!GitHub Student Developer Pack申请居然这么简单!2022年6月 写在前面 申请GitHub Student Developer Pack ...
- 白嫖免费域名+免费服务器
点击蓝字关注我们 免费注册地址 https://byet.host/ 不要翻墙 是真的免费吗? byethost.com是一个老牌的免费空间商,从2006年起就开始提供免费空间了,其免费服务非常稳定. ...
- 下载 github上面脚本_带大家一起来白嫖一波Github的免费计算资源呀~
原文链接 带大家一起来白嫖一波Github的免费计算资源呀~mp.weixin.qq.com 导语 新的一周,从手把手带大家一起来白嫖一波Github的计算资源开始. 白嫖的主要原理是利用Githu ...
- 阿里云服务器白嫖和购买教程——学生向
文章目录 吐槽 一.登录账号 二.白嫖阿里云 1.试用 2.购买 3.云服务器配置 4.选择网络和安全组 三.安全组配置 总结 吐槽 大学学习的知识过于老旧,感觉大学四年没学到什么真本事,而学校分级也 ...
最新文章
- Linux中bashrc河bash_profile
- 让VirtualBox的虚拟机器在电脑开机时自动启动
- 如何用PHP写商品折扣_秒杀抢购时的超发,你用php如何优化的
- tf.where 用法
- RabbitMQ消息队列(二):”Hello, World“
- JZOJ 5264. 【NOIP2017模拟8.12A组】化学
- httrack 拷贝网站到本地(好东西,但是发现考的不全)
- 一步一步写算法(之循环单向链表)
- linux下使用过的命令总结(未整理完)
- HttpInterceptor 拦截器 - 网络请求超时与重试的简单实现
- html页面div高度相减,关于html:两个div底部div到高度调整与浏览器窗口
- 火车票能不能选座_在火车站买火车票可以选座位吗?
- 基于springboot的学生选课系统
- git mac 可视化diff_Git可视化比较工具P4Merge
- jsp页面中文乱码解决方法
- Xshell6 Xftp6 破解
- 如何用Python绘制多种风玫瑰图
- 新版Namecheap域名转出注册商方法解锁及获取转移
- php在线安装ipa,网页安装ipa
- 解决: Error Code: 2013. Lost connection to MySQL server during query
热门文章
- java 反序列化工具 marshalsec改造 加入dubbo-hessian2 exploit
- 在线编译工具 Jenkins Hudson 的关系
- python 制作自定义包并安装
- goland 设置project gopath
- linux shell install 命令简介
- linux 内核编译错误 .size expression for copy_user_generic_c does not evaluate to a constant
- web前端 react与vue 流行框架的比较
- VC中的宏 (#define) 与预处理 (#if/#ifdef/#pragma) 的使用方法总结。
- C语言中的sizeof解析
- Android开发--Spinner控件的使用