先日ちょっと必要になって調べたので、他にも記事はありますが書いて覚えるという意味でちょっと書いてみます。
#SSHポートフォワードとは
※あくまでイメージです
SSHでトンネルを掘ってその中に好きなもの(この場合RDP3389)を通す方法。
図の例でいえばLinux2のセグメントにある他のマシンにもLinux2からアクセスできるのであればアクセス可能。
#必要なもの
- クライアントPC(Windows1)
- 踏み台になるPCとか(Linux1)
- もう一回踏み台になるPCとか(Linux2)
- 接続先PC(Windows2)
※SSH接続する際の証明書かパスワードは分かっていることとする、Windowsも同様
#とりあえず1段で試してみる
クライアントPCはWindowsなのでTeraTermを使います。
OKをクリック
上記のようにして1段目のLinux1にSSH接続しておく。
その後、もう一つTeraTermを開き、127.0.0.1:10022に接続。すると2段目の踏み台であるLinux2に繋がります。
SSHトンネルが通常の接続、青線がポートフォワードによるSSHです。
#では2段回で接続
さて、2段目のLinux2にダイレクトに行けたところでRDPは使えません。ではどうするか。
まず一回目は以下のようにします。先ほどと違うのは2段目のLinux2でなく1段目のLinux1自身を指しているところがミソです。
OKをクリック
次に上記設定で1段目のLinux1に接続します。
そして接続したLinux1上で以下のコマンドを叩きます。
※ホスト名等は環境によって合わせてください
Linux1上で
ssh user@linux2 -L 13389:windows2:3389
これでLinux1からLinux2へのトンネルが掘れました。
ここまでのイメージはこんな感じ。
さぁ、Windows1からリモートデスクトップクライアントを立ち上げ、127.0.0.1:13389に接続してみましょう。
できましたか?
動作イメージとしてはこんな感じです。
Windows1の13389からLinux1の13389へ行き、Linux1の13389からWindows2への3389につながります。
出来ない場合はトンネルがつながっていないか、どこかで設定が間違っている場合があるので一個ずつ確認してみてください。
ちなみにこれはルーターでポートフォワードされていても問題ありません。
そのような場合は以下のようになります。
ssh -i 証明書のパス user@ルーターのIP -p 待ち受けポート - L 13389:127.0.0.1:13389
ssh -i 証明書のパス user@linux2 -L 13389:windows2:3389