|
| 1 | +## GitHub Action SSH Tunnel via ngrok |
| 2 | + |
| 3 | +A GitHub Action for connecting to the runner via SSH. |
| 4 | + |
| 5 | +### Why? |
| 6 | + |
| 7 | +Debugging GitHub Actions remotely can be difficult. Maybe you want to connect to the runner environment live to troubleshoot. |
| 8 | + |
| 9 | +### Requirements |
| 10 | + |
| 11 | +1. An [ngrok](https://ngrok.com/) account (free) |
| 12 | +2. An SSH public key (e.g. `/.ssh/id_rsa.pub`) |
| 13 | + |
| 14 | +### Compatibility |
| 15 | + |
| 16 | +This Action was only tested on the **Ubuntu 20.04** runner, but it may work on other Linux based runners. |
| 17 | + |
| 18 | +### Setup |
| 19 | + |
| 20 | +Create a YAML workflow (e.g. `ssh.yml`) in `.github/workflows` following this example: |
| 21 | + |
| 22 | +```yaml |
| 23 | +name: SSH Tunnel |
| 24 | +on: push |
| 25 | + |
| 26 | +jobs: |
| 27 | + deploy: |
| 28 | + name: Set up tunnel |
| 29 | + runs-on: ubuntu-20.04 |
| 30 | + steps: |
| 31 | + - name: Checkout |
| 32 | + uses: actions/checkout@v2 |
| 33 | + |
| 34 | + - name: Setup tunnel |
| 35 | + uses: joshlarsen/ssh-tunnel-action@main |
| 36 | + with: |
| 37 | + timeout: 1h |
| 38 | + ssh_public_key: ${{ secrets.SSH_PUBLIC_KEY }} |
| 39 | + ngrok_token: ${{ secrets.NGROK_TOKEN }} |
| 40 | +``` |
| 41 | +
|
| 42 | +### Required Secrets |
| 43 | +
|
| 44 | +Create two repository secrets (Settings -> Secrets -> New repository secret) |
| 45 | +
|
| 46 | +`SSH_PUBLIC_KEY`: your local SSH public key (e.g. `~/.ssh/id_rsa.pub`) |
| 47 | + |
| 48 | +`NGROK_TOKEN`: your ngrok auth token |
| 49 | + |
| 50 | +### Deploy |
| 51 | + |
| 52 | +On the next push, GitHub Actions will download the ngrok binary and set up a TLS tunnel on a random port. Check the [ngrok dashboard](https://dashboard.ngrok.com/status/tunnels) to get the hostname and port the tunnel is listening on. |
| 53 | + |
| 54 | + |
| 55 | + |
| 56 | +### Connect via SSH |
| 57 | + |
| 58 | +The runner username is `runner`. Connect to the ngrok tunnel port using SSH: |
| 59 | + |
| 60 | +``` |
| 61 | + |
| 62 | +
|
| 63 | +The authenticity of host '[0.tcp.ngrok.io]:11785 ([3.134.39.220]:11785)' can't be established. |
| 64 | +ECDSA key fingerprint is SHA256:f27aouAtzHOx7rzEnrGUfKy9xhpFK5auzq6+ZY. |
| 65 | +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes |
| 66 | +Warning: Permanently added '[0.tcp.ngrok.io]:11785,[3.134.39.220]:11785' (ECDSA) to the list of known hosts. |
| 67 | +
|
| 68 | +Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-1039-azure x86_64) |
| 69 | +
|
| 70 | + System load: 0.0 Processes: 153 |
| 71 | + Usage of /: 75.5% of 83.18GB Users logged in: 0 |
| 72 | + Memory usage: 10% IPv4 address for docker0: 172.17.0.1 |
| 73 | + Swap usage: 0% IPv4 address for eth0: 10.1.0.4 |
| 74 | +
|
| 75 | +runner@fv-az214-809:~$ |
| 76 | +runner@fv-az214-809:~$ curl ipinfo.io |
| 77 | +{ |
| 78 | + "ip": "52.173.149.212", |
| 79 | + "city": "Des Moines", |
| 80 | + "region": "Iowa", |
| 81 | + "country": "US", |
| 82 | + "loc": "41.5878,-93.6274", |
| 83 | + "org": "AS8075 Microsoft Corporation", |
| 84 | + "postal": "50392", |
| 85 | + "timezone": "America/Chicago", |
| 86 | + "readme": "https://ipinfo.io/missingauth" |
| 87 | +} |
| 88 | +runner@fv-az214-809:~$ |
| 89 | +``` |
0 commit comments