misocaのブログにngrokの紹介が載っていて、あ、面白そうなサービス、と思っていたところ、NATの内側にあるローカルサーバーに外部からSSHで接続する必要が生じたので、早速試してみました。
インストール
インストールはなにも難しくありません。
mor@LaptopDev:~/bin$ wget https://dl.ngrok.com/ngrok_2.0.19_linux_386.zip mor@LaptopDev:~/bin$ unzip ngrok_2.0.19_linux_386.zip
ダウンロードする際は、32bit版/64bit版がわかれているので、そこだけ注意してください(32bit版は、More Platforms を開くとでてきました)。
早速動かしてみます。
mor@LaptopDev:~/bin$ ./ngrok tcp 22
Tunnel session failed: Non http-protocols are only available after you signup at https://ngrok.com/signup
mor@LaptopDev:~/bin$
おっと、SSHの場合は、サインアップが必要だそうです。なので、 https://ngrok.com/ からサインアップします(GitHubアカウントがあったのですぐでした)。
サインアップした時点では、freeプランなので、お金もかかりません。
サインアップ後、ngrokサイトのダッシュボード画面で表示されるauthtokenを指定してやります。
mor@LaptopDev:~/bin$ ./ngrok authtoken xxxxxxxxxxxxxxxxxxx
設定ファイルが、~/.ngrok2/ngrok.yml に作成されます。
これで、
mor@LaptopDev:~/bin$ ./ngrok tcp 22
とすると、見事にポートフォワーディングをしてくれました。
設定ファイルの作成
これでも十分使えるのですが、今回の場合対象のサーバーがリモートにあるので、OS起動後に自動的に ngrok の設定ができていると嬉しいです。
~/.ngrok2/ngrok.yml の内容を追記します。設定ファイルの内容はngrokのDocumentationに詳しく載ってます。
authtoken: xxxxxxxxxxxxxxxxxxxxxxxx log_level: info log_format: logfmt log: /var/log/ngrok.log tunnels: ssh: proto: tcp addr: xxx
addr でポート番号を指定します。ssh のポート番号を変える場合は、/etc/ssh/sshd_config 側の設定も確認してください。 これを呼び出すには、
mor@LaptopDev:~/bin$ ./ngrok start --config=~/.ngrok2/ngrok.yml ssh
のように呼び出します。コマンドライン上のsshは、設定ファイル中のssh(トンネル名?というのかな)に対応しています。この名前はユーザーが任意につけられるようです。 今回は、簡単に確認するため、cronで起動時に、これを呼び出すようにしてみます。
mor@LaptopDev:/etc/cron.d$ cat ngrok # /etc/cron.d/ngrok: crontab entries for ngrok SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin @reboot root /opt/ngrok/bin/ngrok start --config=/opt/ngrok/ngrok2/ngrok.yml ssh >> /var/log/ngrok.log 2>&1 mor@LaptopDev:/etc/cron.d$
設定ファイル等はrootの持ち物にして、それっぽい場所におきました。設定後、再起動してから、ngrok.comのダッシュボードを見ると
のように接続用のURLが登録されていることがわかります。もし、接続用のURLやポート番号を固定にしたい場合は、有料プランに変更すればよいようです。
ここまで、無料でつかえるなんて、ngrokさんありがたすぎです。