CrescPia

SSH ポートフォワーディング

SSH ポートフォワーディング(SSH トンネル)という技術を知りました。
これは面白い。

こんなことがしたかった

VPS を監視しています。
状態は Web で見たいのですが公開はしたくありません。
いい方法は無いのか?
公開した上で IP を制限していました。


それでもいいのですが、そもそも公開しない方法があります。
SSH ポートフォワーディングを利用すればできます。


VPS 上では localhost:8090 というように配信します。
外部には公開しません。


ここで、ローカル PC 上で、

ssh -L 8091:localhost:8090 vps_ip

というような ssh のコマンドを実行しておきます。
ローカル PC のブラウザで localhost:8091にアクセスすると VPS 上の配信内容が表示されます。
It’s like magic!


VPS では外部には公開していないのにローカル PC から見れてしまうんです。
しかも localhost にアクセスして。

SSH ポートフォワーディング

SSH ポートフォワーディングは Gemini との会話の中で知ったのですが、本か何かでもう少しちゃんと知りたい。
Software Design の 2012 年 10 月号に記事がありました。
「SSH力をつけよう!」読み応えありました。 (古くて誰も参照できないですね・・・。)
ネット上に記事があればと思ったのですが、見当たらなかったです。
筆者の方が作成したスライドがありましたので、リンクしておきます。
SSH力をつけよう | PDF


少しだけかいつまんで勉強した内容を残しておきます。

まずは基本

ssh リモートホスト              # カレントユーザーがログインユーザーとして使用される
ssh  -l username リモートホスト # オプションでログインユーザーを指定
ssh リモートホスト ls           # ログインしてコマンド(ls)を実行

ポートフォワーディングの種類

  • ローカルポートフォワーディング (今回はこれに着目)
  • リモートポートフォワーディング
  • ダイナミックポートフォワーディング

ローカルポートフォワーディング

  • コマンド
ssh -L [bind_address:]port:host_address:host_port リモートホスト
  • ローカルポートフォワーディングは -L オプションで指定。
  • bind_address はローカル側で複数インターフェースがある場合は指定する。省略した場合は localhost になる。
  • host_addresshost_port はログイン先の sshd から見た転送先。
  • host_address はリモートホストから接続可能なアドレス。(←思っていたよりずっと柔軟でした。接続したリモートホストだけに留まらない。)

記事ではポートフォワーディング以外にも ssh についていろいろと説明されています。
コンフィグファイル、多段 ssh、エージェント転送などなど。
ssh は中途半端な知識ではかえって危険なので、これからも注意して勉強していきたい。