はじめに
ハンズオンなどで一時的なサーバー環境として利用できる Katacoda は非常に便利ですね。
しかし、ブラウザからアクセスする必要があるので、通常ターミナル操作もブラウザで行う必要があります。
そこで、PC から ngrok 経由で SSH アクセスする方法を試してみました。

準備
1. ngrok のアカウント登録とアクセストークン作成
ngrok のアカウントを登録し、アクセストークンを作成します。
無料プランの場合は作成できるアクセストークンは 1 つです。

2. Katacoda 環境の SSH キー (秘密鍵) の取得
Katacoda 環境を立ち上げて SSH キー (秘密鍵) を表示し、PC へ保存します。
$ cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIJJwIBAAKCAgEAqqIFkwTmb7C3M+2cc+4uPmdNFgNNWPsaTbL1Igum5AfBeD4b
lZCjJ/sMOxf1LS3EPajulNSvH+RaZA5nkEC71e7mApxu1+t4mvp4z4BfHrhea6Vr
5oxuWc/+oCxn/PsBTQuMl8o1Oxu1XHuffyXW2j1HTpgN2i9lijMaHmvyAzkxADkR
XMjCzTSXctMmDcS3xJe8NyGNdqaP3D29lSnqiaot1KsCa6A2IwjreX0uBadLb872
4lz/Pp24XdLk0xJILZd/xVNKM0AQB4DulJW0ldbCRCI2RvueNxbUX1dLW5lMk+/j
dDRjmWCdxUNQfzKz+h/Dv/GIYmkAy8JC+c4cT6lvXMgGcNtO7mWzNuqIXwkFDJha
GCfXwQP3be2l28Oa29JYoRWGTKveDVItwASwwRLE/SefpiaJnZVBw8B8c7XIzvCZ
04T+YgXGJjYqgJ4W5+9QL6/Gc9bx1T9ExQvH+NDZyvwO58E0MNGkPh9LvhBq8fto
FZklJcEMgw1JRyaRCNCHn1rXZgamLzMn1Q3/EhkqJZHF1CcV+t4ghRMjzMjC1Fi2
z3MEYZVJ+hujVQyOrC8H73nlxSaabkjMflqnN2ZshByI/5lbhLsoFZHtwXeP7/Hu
KOmnUfd8hfxbqtENGzIYH9sQsFRUmqpbWv6OZtMDDcAjtzbgywmYyBY9/r8CAwEA
AQKCAgBhDgl3p3jfHLgIDGZKNrcM/bsGA1jSfPloKptuAwypdZPhLgqIlx2GlzBM
yILHcNnHbLhP5W27CSs08FCN55QvylQANjSCEkimdkOTW2Q/WAU024G1QDlgUoN1
XezEI42I4kHU8Mo4Vblh4ltFeiNsPSC7Hpf6e60Y35pCpYmhtb0ecFdk3DiZegmO
(省略)
3. Katacoda 起動スクリプトの準備
以下の流れで起動スクリプトを記述します。
- ngrok プログラム (zip ファイル) をダウンロードする
- zip ファイルを解凍する
- アクセストークンを登録する
- ngrok を起動する
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
unzip *.zip
./ngrok authtoken [アクセストークン]
./ngrok tcp 22
手順
1. Katacoda 環境の起動
Katacoda のシナリオを実行し環境を起動します。
ngrok の無料プランは起動する度に接続先 (ホスト名とポート番号) が変わるのでメモしておきます。
以下の例では、ホスト名: 0.tcp.ngrok.io、ポート番号: 17786 です。

2. PC から SSH 接続
準備 2.で取得した SSH キー (秘密鍵) を ファイル名: id_rsa で保存した場合のコマンドです。
$ ssh -i ./id_rsa -p [ポート番号] root@[ホスト名]
# 上記の例
$ ssh -i ./id_rsa -p 17786 root@0.tcp.ngrok.io
※ Are you sure you want to continue connecting (yes/no)? と聞かれた場合は yes と回答します。
応用例
ngrok の起動オプションを変更すると PC から VNC 接続でデスクトップ画面を表示させることも可能です。
PC から VNC 接続する際のパスワードを password に設定して vncserver を起動する例です。
PC の VNC Viewer から接続する際にホスト名、ポート番号、パスワードを指定します。
printf "password\npassword\n\n" | vnc4passwd
nohup vncserver -geometry 1366x768
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
unzip *.zip
./ngrok authtoken [アクセストークン]
./ngrok tcp 5901

2022/4/12 追記
id_rsa (SSH キーの秘密鍵)はKatacodaのシナリオを実行の都度、作成されるようになりました。
ngrok を起動するとセッションを切られるようになりました。