以下のような構成を考える.Localは手元のサーバ,Server1は踏み台用サーバ,Server2がターゲットとなるサーバです.
通常,何も設定していない場合は,LocalからServer1にssh接続し,Server1からServer2にssh接続します. Local$ ssh account1@Server1 Server1$ ssh account2@Server2 あるいは ssh -t account1@Server1 "ssh account2@Server2" 今回は,LocalからServer1には公開鍵認証方式を使って接続し,LocalからServer2へ一発のコマンドで接続する事を考える. (Server1からServer2への接続は常にパスワードの入力を要求するように残しておくため,Server1からServer2への接続には公開鍵認証方式を用いなかった) LocalからServer1に公開鍵認証で接続する 1.まず,Server1へ接続する ssh account1@Server1 sshの設定で鍵の利用ができるかは「/etc/sssshd_config 」か,「/etc/ssh/sshd_config」で確認できると思う. 2.「.ssh」ディレクトリへ移動し,RSAで暗号化された鍵を生成する cd .ssh ssh-keygen -t rsa パスフレーズを入力してできる「id_rsaが秘密鍵」「id_rsa.pubが公開鍵」です. 3.公開鍵をauthrized_keysとして保存し,古い公開鍵は削除する cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys rm id_rsa.pub 4.パーミッションを変更し,ログアウトする chmod 600 ~/.ssh/authorized_keys logout 5.Localの「.ssh」ディレクトリへ移動し,秘密鍵をローカルへ保存する(本当はネットワーク越しに送るべきではないですが・・・) cd .ssh scp account1@Server1:~/.ssh/id_rsa ~/.ssh/server1_rsaKey 接続できるか確認 ssh -i server1_rsaKey account1@Server1 ProxyCommandを使って,LocalからServer2までssh接続する ProxyCommandは,sshクライアントと標準入出力でやりとりしてくれるみたい.詳しくは「多段 ssh / rsync するために ProxyCommand を使ってみる - daily dayflower」あたりを参照. 1.「.ssh/config」に,ssh接続ごとに,接続に関する情報を以下のように書き込む Host S1 HostName Server1 User account1 IdentityFile ~/.ssh/server1_rsaKey Host S2 HostName Server2 User account2 ProxyCommand ssh S1 nc %h %p 以上より,LocalからServer2へssh接続するには,以下のコマンドでできるようになる. ssh S2 LocalからS1(Server1)へは,公開鍵認証で接続しているのでパスフレーズを覚えてなくてもバックグラウンドで接続し,S2(Server2)への接続を試みてくれる. これで,ssh接続を利用するscp等も,以下のように省略して利用できる scp -r S2:/path/to/data /local/path/downloadData ただ,以下のように書いたrsyncはなぜか利用できなかった rsync -rav --exclude '/path/to/data/tmp/' S2:/path/to/data /local/path/downloadData