ポートフォワード

RemoteHostAにログインする

 ssh -f -L 10022:RemoteHostA:22 RemoteHostA sleep 100000
 ssh -p 10022 -oHostAliasKey=RemoteHostA localhost
-L XXX
ローカルホストのXXXポートを利用するように指定する。
-f
ポートフォワードをバックエンドで待機させておくためのオプション
sleep 1000000
-f オプションを使う場合、なんらかのシェルコマンドを指定する必要がある。ループするシェルコマンドはまずいらしいので、長時間のsleepを指定するのが一般的なようだ。
HostAliasKey
これがないとローカルのSSHがリモートサーバのサーバーキーを確認する時に警告を表示して、処理が止まる。サーバーキーの確認をしないようにすることで回避する方法もあるようだ。

RemoteHostAを経由し、RemoteHostBにログインする

 ssh -f -N -L 10022:RemoteHostB:22 HostAUser@RemoteHostA
 ssh -l HostBUser -p 10022 -oHostKeyAlias=RemoteHostB localhost
-N
リモートでシェルコマンドを実行しなくル。上のコマンド例でsleep 100000の記述を不要にできる。

設定ファイルを利用して省力化

上の「RemoteHostAを経由し、RemoteHostBにログインする」を省力化する。

$HOME/.ssh/configを以下のように編集する。

 Host tunnelToHostB
 HostName RemoteHostA
 User HostAuser
 Compression yes
 Port 22
 LocalForward 10022 RemoteHostB:22
 
 Host HostB
 HostName localhost
 user HostBuser
 Port 10022
 HostKeyAlias RmoteHostB

これを利用するには以下のようにコマンドを入力する。

 ssh -f -N tunnelToHostB (HostBまでのトンネルが掘られる)
 ssh HostB(HostBにSSH接続する)

さらに省力化するには以下のようなシェルスクリプトを書いておくとよい。

 #/bin/sh
 ssh -q -f -N tunnelToHostB
 ssh HostB

注意点

  • リモートサーバ側のsshd_configを以下のようにする。
     AllowTcpForwarding yes
  • リモートサーバ側のSSHDのアクセス制御で自サーバからの接続を許可する。tcp wrapperなら、hosts.allowを以下のようにする。
     sshd : 100.200.100.200 : allow
     (リモートサーバ側のIPアドレスを100.200.100.200とした場合)
     

参考


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS