LoginSignup
25
24

More than 5 years have passed since last update.

Raspberry Piをngrokで公開する - Part3: ngrok 2.0でSSHをトンネルする

Last updated at Posted at 2015-08-07

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
$ sudo unzip ngrok_2.0.19_linux_arm.zip -d /usr/local/bin
Archive:  ngrok_2.0.19_linux_arm.zip
  inflating: /usr/local/bin/ngrok
$ ngrok version
ngrok version 2.0.19

サインアップするとダッシュボードに表示されるtokenを使い、ローカルに設定ファイルを作成します。

$ ngrok authtoken xxx
Authtoken saved to configuration file: /home/pi/.ngrok2/ngrok.yml

有料プラン

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
ngrok by @inconshreveable                                       (Ctrl+C to quit)

Tunnel Status                 online
Version                       2.0.19/2.0.19
Web Interface                 http://127.0.0.1:4040
Forwarding                    tcp://0.tcp.ngrok.io:36198 -> localhost:22

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

リモートからSSH接続してみます。標準出力されているForwardingのドメイン名とポートを使います。

$ ssh pi@0.tcp.ngrok.io -p 36198

ダッシュボードからURLを取得

ngrokのダッシュボードTunnels Onlineセクションに現在接続しているクライアントの情報とトンネルのURLが表示されます。

#   URL Client IP
0   tcp://0.tcp.ngrok.io:36198  126.229.158.108

Supervisor

ngrokのSSHトンネルをSupervisorを使いデモナイズします。IoTプロダクション環境向けのngrok linkというサービスも開始しているように、ngrokを使うとコネクテッドデバイスの管理が簡単になります。Raspberry Piの電源を入れるとngrokのSSHトンネルが開始するようにしておけば、ダッシュボードからURLを確認してリモートからSSH接続ができるようになります。

設定

Supervisorの設定ファイルを作成し、commandにngrokの22ポートのトンネルを指定します。また--authtokenフラグでtokenを明示的に指定します。

/etc/supervisor/conf.d/ngrok-ssh.conf
[program:ngrok-ssh]
command=/usr/local/bin/ngrok tcp 22 --authtoken xxx
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/ngrok.log
user=pi

rereadして作成した設定ファイルをSupervisorに読み込ませます。

$ sudo supervisorctl reread
ngrok-ssh: available

addでSupervisorのサブプロセスにngrokを追加します。

$ sudo supervisorctl add ngrok-ssh
ngrok-ssh: added process group
$ sudo supervisorctl status ngrok-ssh
ngrok                            RUNNING    pid 2504, uptime 0:00:18

サブプロセスに追加した後にconfを編集すると、updateが必要なので忘れないようにします。

$ sudo supervisorctl update ngrok-ssh

テスト

Supervisorからngrokを起動した後も、ngrokコマンドを直接実行した場合と同様にngrokのダッシュボードTunnels Onlineセクションにオンラインのクライアント情報が表示されます。

#   URL Client IP
0   tcp://0.tcp.ngrok.io:39016  126.229.158.108

このURLとポートを使い、リモートからRaspberry PiにSSH接続します。

$ ssh pi@0.tcp.ngrok.io -p 39016
25
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
24