ngrokの最新バージョンは2.0.19です。サインアップすると付与されるtokenがすでに2.0になっているため、1.7のクライアントを使ってSSHのトンネルはできません。前回はNode.jsのラッパーを使い、ngrokのバージョンは1.7でした。今回は2.0のバイナリをインストールして、ローカルの無線LANにつながっているRaspberry PiにリモートからSSH接続してみます���
ngrok 2.0.19
Raspberry PiにログインしてダウンロードページからLinux/ARMのバイナリをインストールします。
$ wget https://dl.ngrok.com/ngrok_2.0.19_linux_arm.zip |
サインアップするとダッシュボードに表示されるtokenを使い、ローカルに設定ファイルを作成します。
$ ngrok authtoken xxx |
有料プラン
pricingのページによるとFreeプランの場合は同時接続クライアント数が1つです。
- Freeプラン
- 同時接続できるクライアントは1つ
- HTTPS/TCP のトンネルのみ利用可能
Raspberry PiのHTTPとSSHを同時に公開することができません。有料プランにすると同時接続クライアント数が増え、独自ドメインが使えるようになります。一番安いIndividualプランは同時接続クライアント数が3つで$60/年
です。$5/月
の計算になるので個人の開発環境としてお手頃です。
接続テスト
コマンドからURLを取得
Raspberry Piのシェルでngrokをフォアグラウンドで実行します。ngrok tcp 22
とするとSSHの22ポートをトンネルすることができます。
$ ngrok tcp 22 |
リモートからSSH接続してみます。標準出力されているForwardingのドメイン名とポートを使います。
$ ssh pi@0.tcp.ngrok.io -p 36198 |
ダッシュボードからURLを取得
ngrokのダッシュボードのTunnels Online
セクションに現在接続しているクライアントの情報とトンネルのURLが表示されます。
# URL Client IP |
Supervisor
ngrokのSSHトンネルをSupervisorを使いデモナイズします。IoTプロダクション環境向けのngrok linkというサービスも開始しているように、ngrokを使うとコネクテッドデバイスの管理が簡単になります。Raspberry Piの電源を入れるとngrokのSSHトンネルが開始するようにしておけば、ダッシュボードからURLを確認してリモートからSSH接続ができるようになります。
設定
Supervisorの設定ファイルを作成し、command
にngrokの22ポートのトンネルを指定します。また--authtoken
フラグでtokenを明示的に指定します。
[program:ngrok-ssh] |
reread
して作成した設定ファイルをSupervisorに読み込ませます。
$ sudo supervisorctl reread |
add
でSupervisorのサブプロセスにngrokを追加します。
$ sudo supervisorctl add ngrok-ssh |
サブプロセスに追加した後にconfを編集すると、updateが必要なので忘れないようにします。
$ sudo supervisorctl update ngrok-ssh |
テスト
Supervisorからngrokを起動した後も、ngrokコマンドを直接実行した場合と同様にngrokのダッシュボードのTunnels Online
セクションにオンラインのクライアント情報が表示されます。
# URL Client IP |
このURLとポートを使い、リモートからRaspberry PiにSSH接続します。
$ ssh pi@0.tcp.ngrok.io -p 39016 |