SSH のPortForwarding
前から本で存在は知っていた、SSHのPort Forwardingを使う機会があった。非常に便利。
サイトで検索しながらあれこれ試してようやく使い方が分かったのだが、どのサイトの説明も理解するための前提となる何かが不足していて分かりにくく感じた。Manを読んでも本当に使い方が分からないコマンドというのがたまにあるが、これもそんな感じ。
忘れないようにする目的も兼ねて自分の理解の道筋にそって書いてみる。今回使ったのはローカルポートをゲートウェイとなるサーバーを経由して任意のサーバーのポートに転送するやり方。
下記のような、22番ポートが通る外部アドレスが一つだけ公開されているネットワークの中の目的サーバーの8080番ポートにアクセスしたいとする。
ゲートウェイサーバー外部IP 192.168.1.1
(ゲートウェイサーバー内部IP 192.168.100.100)
(目的サーバー 192.168.100.200)
手順としては
1)自分のPCから、SSHでポート転送オプション付でをゲートウェイサーバーに接続する。
ssh -L 8080:192.168.100.200:8080 account@192.168.1.1
#本には-f オプションを使うように書かれていたが、引数に実行コマンドを何か書かないと受け付けられない模様。なしでも問題なかったので、-f オプションは使わなかった。
このコマンドは順番が分かりにくいが、
ssh -L [ローカルでの待ち受けポート]:[ゲートウェイサーバーからアクセスする場合のIP(この場合は内部IP)]: [ゲートウェイサーバーからアクセスする場合のポート番号] [ゲートウエイサーバーにログインするアカウント名]@[ゲートウェイサーバーのIPアドレス]
という構成になっている。つまり、必要な情報のセットは3つあり、下記のとおり。
(1) ローカルで待ち受けるポート番号
(2) ゲートウェイサーバーから見た場合の目的サーバーのIP&ポート番号
(3) ゲートウェイサーバーにSSH接続するための一般的な情報
私の場合、2)がゲートウェイサーバーから見た場合の内部IPになるという点と、3)の接続情報が必要という点が理解する上でのポイントだった。
2)SSHをつなげた状態でローカルポートにアプリを接続
あとはアプリから localhost:8080 宛てにアクセスするだけで、目的サーバーのアプリにアクセスできる。
自分のPCでTeraTermを使う場合はの操作はこれまたちょっと分かりにくい。
まず起動すると出てくる入力欄はキャンセルしてしまう。
メニューからSSH転送を選択。
追加を押す。
コマンドのときと同様の内容を入力。ここで入力するのはローカルポートと目的サーバーの情報だけ。
Okを押すとこの画面になる。
さらにOKを押すと元の画面に。
メニューから新規接続を選択すると
いつもの画面に戻るので、ここでゲートウェイサーバーに接続する
接続後は、TeraTermでこのコネクションを切断しない限り、ローカルポートが転送される。