卧槽!竟然可以直接白嫖 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 2019macOS X Catalina 10.15

看起来很美好,但实际上 GitHub Ac­tions 本身是不允许直接连接进行交互式操作的,也就是说你无法通过 SSH 来连接服务器。如果有办法能够直接连接到服务器进行交互式操作,那岂不是相当于白嫖了一台或多台 E5 2vCPU/7G RAM/90G SSD 配置的 VPS?

本文就来告诉你如何通过一些奇技淫巧来绕过 GitHub Actions 本身的限制,直接连接到服务器!

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

方案一

mxschmitt/action-tmate[4]

这是第一个实现 tmate[5] 连接 Ac­tions 服务器的 ac­tion ,但此方案在退出连接后不能进行到下一个步骤,所以在实际使用中没有多少价值,只能用于 SSH 连接。不过由于其开天辟地的作用,我决定把它放到第一位。

work­flow 文件示例:

name: CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup tmate session
      uses: mxschmitt/action-tmate@v2

方案二

csexton/debugger-action[6]

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

work­flow 文件示例:

name: debugger-action
on: 
  watch:
    types: started
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
     - uses: actions/checkout@v2

     - name: Setup Debug Session
       uses: csexton/debugger-action@master

Action 日志输出:

方案三

该方案没有使用 action 来实现,而是另辟蹊径,直接使用 ngrok 来穿透内网,脚本如下:

#!/bin/bash


if [[ -z "$NGROK_TOKEN" ]]; then
  echo "Please set 'NGROK_TOKEN'"
  exit 2
fi

if [[ -z "$USER_PASS" ]]; then
  echo "Please set 'USER_PASS' for user: $USER"
  exit 3
fi

echo "### Install ngrok ###"

wget -q https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-386.zip
unzip ngrok-stable-linux-386.zip
chmod +x ./ngrok

echo "### 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" ]]; then
  echo ""
  echo "=========================================="
  echo "To connect: $(grep -o -E "tcp://(.+)" < .ngrok.log | sed "s/tcp:\/\//ssh $USER@/" | sed "s/:/ -p /")"
  echo "=========================================="
else
  echo "$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-latest
    steps:
     - uses: actions/checkout@v1

     - name: Try Build
       run: ./not-exist-file.sh it bloke build

     - name: Start SSH via Ngrok
       if: ${{ failure() }}
       run: curl -sL https://gist.githubusercontent.com/retyui/7115bb6acf151351a143ec8f96a7c561/raw/7099b9db76729dc5761da72aa8525f632d8875c9/debug-github-actions.sh | bash
       env:
        # After sign up on the https://ngrok.com/
        # You can find this token here: https://dashboard.ngrok.com/get-started/setup
        NGROK_TOKEN: ${{ secrets.NGROK_TOKEN }}

        # This password you will use when authorizing via SSH 
        USER_PASS: ${{ secrets.USER_PASS }}

     - name: Don't kill instace
       if: ${{ 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


你可能还喜欢

点击下方图片即可阅读

Thanos 与 VictoriaMetrics,谁才是打造大型 Prometheus 监控系统的王者?

云原生是一种信仰 ????

码关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

点击 "阅读原文" 获取更好的阅读体验!

❤️给个「在看」,是对我最大的支持❤️
  • 22
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: GitHub Copilot是由GitHub和OpenAI共同开发的一款新型编程辅助工具,它使用人工智能技术,能够分析代码,预测程序员的下一步操作,并提供代码片段和建议。然而,很多人认为GitHub Copilot实际上等于是在免费使用OpenAI的GPT-3技术,尤其是在没有向OpenAI支付任何费用的情况下免费使用它的API接口,因此被称为“白嫖”OpenAI技术。 GitHub Copilot的免费使用引发了很多关于知识产权和付费模式的讨论。虽然GitHub Copilot的免费使用可能会吸引更多的开发者,但也可能对OpenAI的商业模式造成竞争压力。除此之外,也有人认为,免费使用GitHub Copilot可能会损害开发者的职业发展,因为缺乏独立解决问题和独立思考的能力,这可能会对他们的工作效率和质量产生负面影响。 总之,无论如何,免费使用GitHub Copilot确实为程序员提供了便利,但是我们也应该认识到其局限性和风险,避免出现不必要的负面影响。GitHub Copilot只能作为编程辅助工具的一种选择,而不是完全依赖的唯一解决方案。进一步地讲,在免费使用GitHub Copilot的同时,我们应该学会独立思考和解决问题的能力,这样才能成为真正的优秀程序员。 ### 回答2: GitHub Copilot是一款由GitHub开发的人工智能代码辅助工具。白嫖是指免费使用并获取了一定的价值。对于GitHub Copilot而言,虽然它确实是一个免费工具,但这并不等同于白嫖。 首先,GitHub Copilot是一个由AI驱动的代码提示和生成工具。它通过分析海量的开源代码库,以及用户自己的代码,为开发者提供智能的代码补全和生成功能。这种功能有助于提高开发效率和减少编码工作量。然而,这一功能的实现离不开技术研发团队的巨大工作量和投资。因此,虽然用户可以免费使用GitHub Copilot,但是背后的研发团队和GitHub自身并不是“白嫖”这个工具。 其次,GitHub Copilot是基于开源模型训练的。GitHub Copilot的AI模型是通过使用GitHub上数亿行的开源代码进行训练而得到的。这意味着GitHub Copilot建立在开源社区的贡献和支持之上。因此,使用GitHub Copilot的用户不仅是在获得智能代码提示,同时也在为开源社区作出贡献,共同推动了开源软件的发展和进步。因此,将GitHub Copilot称为“白嫖”是不准确的。 最后,虽然GitHub Copilot是免费提供给用户使用的,在未来可能会推出付费版本,增加更多高级功能。这种商业模式也是为了支持该工具的持续发展和维护。 综上所述,尽管我们可以免费使用GitHub Copilot,但我们应该意识到这背后的努力和付出,同时也要认识到我们作为用户的价值和贡献。因此,以“白嫖”来形容GitHub Copilot并不准确,我们可以更恰当地说是“免费使用并享受开源社区的贡献”。 ### 回答3: GitHub Copilot是一款基于机器学习的代码自动补全工具,由GitHub和OpenAI共同开发。它可以帮助开发者更快速地编写代码,提供了丰富的代码片段和建议,极大地提高了编码的效率和质量。然而,可惜的是,GitHub Copilot并非完全免费使用。 首先,GitHub Copilot基于机器学习模型的训练需要耗费大量的计算资源和数据。这些资源和数据的获取和维护都需要资金支持,因此GitHub Copilot的研发和维护不可能完全免费。 其次,虽然GitHub Copilot对于个人开发者来说是免费的,但对于商业用途的开发者则需要付费订阅GitHub Copilot Pro服务。这个服务提供了更高级的功能和支持,例如对商业代码的支持、更多语言的支持等。 因此,虽然GitHub Copilot在某些方面可以被看作是一种"白嫖"资源,但它仍然需要付费来获取全面的使用权。GitHub Copilot的付费订阅模式确保了其可持续发展与进一步的研发,同时也体现了开发者和GitHub Copilot团队的对彼此努力的认可和回报。所以,即使有部分功能是免费的,我们还是应该为使用GitHub Copilot的各种便利付出相应的价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值