- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- SSH/OpenSSH/ローカルポートフォワード へ行く。
- 1 (2006-10-08 (日) 19:44:49)
- 2 (2011-06-11 (土) 17:06:56)
SSH ポートフォワード
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とした場合)