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にポートフォワードができました。