106:ssh port forwardingによるリモートサーバーアクセス

コラム: インフラ迷子

  • 後輩W:開発サーバーでDjangoを起動したんですが、ブラウザでアクセスできなくて……。

  • 先輩T:お、以前もそんなこと言ってなかったっけ?( 105:127.0.0.1と0.0.0.0の違い

  • 後輩W:はい、 http://192.168.99.1:8000/ でアクセスできるようになったんですが、今日は社外からアクセスができなくて……。

  • 先輩T:あー、社外。 http://192.168.99.1:8000/ は社内のアドレスだから、社外からはつながらないですね。

  • 後輩W:Tさんは社外からいつもどうやってつないでるんですか?

  • 先輩T: ssh port forwarding を使ってるよ。開発サーバーにssh接続はできてるよね?

  • 後輩W:はい、それはできてます。

  • 先輩T:じゃあそのssh接続のときのコマンドに -L 8000:localhost:8000 っていうオプションを付けてssh接続してみて。

  • 後輩W:しました。

  • 先輩T: http://localhost:8000/ にアクセスするとどうなる?。

  • 後輩W:できました!

ベストプラクティス

ssh port forwarding は、ssh接続を利用して、外部のネットワークから直接通信できないポートへの接続を可能にする技術です。 対象のサーバーと直接http通信できない場合であっても、そのサーバーにssh接続できるのであれば、ssh port forwardingで任意のポートと通信できます。

以下のコマンドは、ssh port forwardを行っている例です。

$ ssh server.example.com -L 8000:localhost:80

このコマンドでのsshの接続先は server.example.com です。 接続元PCのポート 8000 を接続先の server.example.com から見て localhost:80 に接続するようにトンネルを作成します。

../_images/port-forwarding.png

図 4.5 ssh port forwardingのイメージ

cover

(中略)詳細は書籍 自走プログラマー をご参照ください