Katacoda 環境に SSH ログインする方法

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/893e1d82-d392-77a1-c852-12118bf13217.png" width="100%">

## 準備
### 1. ngrok のアカウント登録とアクセストークン作成

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/60f41203-0f4d-50c0-3d90-e56d7941a703.png" width="100%">

### 2. Katacoda 環境の SSH キー (秘密鍵) の取得

Katacoda 環境を立ち上げて SSH キー (秘密鍵) を表示し、PC へ保存します。

```bash
$ 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 を起動する

```bash:foreground.sh
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 です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/eba88647-de21-6020-9e65-7bbe5496061a.png" width="100%">

### 2. PC から SSH 接続

準備 2.で取得した SSH キー (秘密鍵) を ファイル名: id_rsa で保存した場合のコマンドです。

```bash
$ 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 から接続する際にホスト名、ポート番号、パスワードを指定します。

```bash:foreground.sh
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
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/52de1409-8bdc-70f9-ae90-7c50b88af394.png" width="100%">

# 2022/4/12 追記

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

![スクリーンショット 2022-04-12 11.56.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/2c40ebb3-5ea7-4605-55ff-2f58c55646ba.png)