zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

多段ポートフォワードについて

sshに鍵認証を設定したのち、/home/user/.ssh/configに書いて多段sshログインするパターンで、OpenSSHのバージョンによって使えるProxyCommandが異なったため、ハマりましたのでメモ。

目的:ユーザ:hogehogeで、バックグラウンドにて多段sshポートフォワードしたい


[サーバA]ここから
 ↓
[サーバB]ここを踏み台にして
 ↓
[サーバC]ここにsshする

公開鍵認証する

# ssh2 鍵ペアの作成
# サーバAにて以下のコマンドを実行
su - hogehoge
ssh-keygen -t rsa -N "" -f /home/hogehoge/.ssh/id_rsa

# 接続先ホストへ公開鍵(/home/hogehoge/.ssh/id_rsaファイルの中身)を追記
# サーバB
vi /home/hogehoge/.ssh/authorized_keys
# →サーバAの/home/hogehoge/.ssh/id_rsa.pubの中身を貼り付け

# 権限は600であること
chmod 600 ~/.ssh/authorized_keys


# サーバCにも公開鍵を配置
# サーバC
vi /home/hogehoge/.ssh/authorized_keys
# →サーバAの/home/hogehoge/.ssh/id_rsa.pubの中身を貼り付け

# 権限は600であること
chmod 600 ~/.ssh/authorized_keys

config修正

# .ssh/configに記載
# 多段SSHかつポートフォワーディングの場合
# 参考:http://qiita.com/lasta/items/41e95a2fdded18c34dae

vi /home/hogehoge/.ssh/config

OpenSSH 5.3未満(サーバBにもnetcatが入っていること前提)

Host           サーバB
HostName       2xx.1xx.2xx.xxx
User           hogehoge
GatewayPorts   yes
IdentityFile   ~/.ssh/id_rsa

Host           サーバC
HostName       192.168.xxx.xxx
User           hogehoge
GatewayPorts   yes
ProxyCommand   ssh サーバB nc %h %p
IdentityFile   ~/.ssh/id_rsa

OpenSSH 5.4以上(-W:netcat mode)

Host           サーバB
HostName       2xx.1xx.2xx.xxx
User           hogehoge
GatewayPorts   yes
IdentityFile   ~/.ssh/id_rsa

Host           サーバC
HostName       192.168.xxx.xxx
User           hogehoge
GatewayPorts   yes
ProxyCommand   ssh -CW %h:%p サーバB
IdentityFile   ~/.ssh/id_rsa

上記設定にて、hogehogeユーザでssh サーバCがパスワードなしで行えたら、最後にポートフォワードをバックグランドで実施します。
# -f : バックグラウンドで動作
# -N : コマンド実行無し

su - hogehoge
ssh -f -N -L 10025:localhost:1521 サーバC

これで、サーバAの10025→サーバCの1521にポートフォワードができました。