會使用到的工具有二
1. Github Action
2. ngrok
先從 ngrok 取得一組 API Token 備用 ; 沒有帳號的同學請使用 Github / Google 帳號連動即可
接著處理 Github Action 的基礎設定
Create new repo: 記得選成 private ; 因為需要放 ngrok API Token
Master Branch 甚至也不用 commit 資訊,因為重點在 Actions 環節
接著準備 main.yml 資訊 ; 記得把 ${API Token} 替換成自己的資訊
# 1682879657
name: CI
on: [push, workflow_dispatch]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: package install
run: sudo apt-get -qq install neofetch speedtest-cli aptitude php-cli
- name: Download ssh config
run: wget https://raw.githubusercontent.com/GogoZin/sshd/main/sshd_config -O sshd_config
- name: replace ssh config
run: sudo cp sshd_config /etc/ssh/sshd_config
- name: restart ssh service
run: sudo service ssh restart
- name: Remove root password
run: sudo passwd -d root
- name: remove runner password
run: sudo passwd -d runner
- name: download ngrok package
run: wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
- name: unzip ngrok package
run: tar zxvf ngrok-v3-stable-linux-amd64.tgz
- name: setup ngrok API token
run: ./ngrok config add-authtoken ${API Token}
- name: Tunel for SSH port
run: ./ngrok tcp 22
直接 New 一份 workflow
因為 main.yml 已經準備好了,所以就 set up a workflow yourself
把 main.yml 貼完後 commit change
通常第一次 commit 完會自動執行,但如果需要重新執行時,也可以使用 Re-run all jobs 處理
點選 Build 也可以確認 CI/CD 狀態
這個時候我們可以回到 ngrok 確認資源啟動狀態 ; hmmm, endpoint 已經正常啟動了 ; 並且點選可以看到設備的基礎資訊
通常介面資訊就已經可以取得 SSH 接入方式了 ; 但如果使用量大的話 endpoint 變換其實是非常大的
所以寫了個程式擷取資訊
#!/bin/bash
api_endpoint="https://api.ngrok.com/endpoints"
authtoken="${ngrok_api_token}"
ngrok_version="2"
hostport=$(curl -sSL \
-X GET \
-H "Authorization: Bearer ${authtoken}" \
-H "Ngrok-Version: ${ngrok_version}" \
"${api_endpoint}" | jq -r '.endpoints[].hostport')
host=$(echo "${hostport}" | cut -d':' -f1)
port=$(echo "${hostport}" | cut -d':' -f2)
ssh "root@${host}" -p "${port}"
就連 ssh 接入設備也就是一下子的事
最後一定要備註的事,這 VPC 不是永久設備,過一陣子就會消失了
實際測試時間有長有短,但有帳面紀錄的時間我會說 43 min
18:15:56 up 43 min, 1 user, load average: 0.00, 0.00, 0.00
18:15:57 up 43 min, 1 user, load average: 0.00, 0.00, 0.00
18:15:58 up 43 min, 1 user, load average: 0.00, 0.00, 0.00
Connection to 0.tcp.ngrok.io closed by remote host.
Connection to 0.tcp.ngrok.io closed.