多数のサーバにsshアクセスするなら.ssh/configを使うと楽
以前は自分が管理するサーバのFQDNとIPアドレスは全て覚えておくのが当然、とか考えていましたが…すみません、覚えきれません。
解決としてaliasを設定していたときもありましたけど、多段接続のことを考慮すると.ssh/configで設定するのが楽です。
~/.ssh/configを編集 Host abc1 HostName 192.168.111.111 Host abc2 HostName abc2.example.com
こうすれば
$ ssh abc1
とか覚えやすい名称でアクセスできます。これだけだとaliasだっていいわけで、本題に入ります。
直接アクセスできないサーバにも一発でつなげる方法
PC1 --(network1)--> Server01 --(network2)--> Server02
network1とnetwork2はServer01で仕切られていて直接アクセスはできないとします。この条件でPC1からServer02にssh接続するには、まずServer01にアクセスし、次にServer02にアクセスする必要があります。キー入力で言えば、sshを実行し、パスフレーズを入力し、またsshを実行し、またパスフレーズを入力してとなるわけです。ちょー面倒です。さらにこちらの方が重要なのですけど、Server01には秘密鍵を置く必要があります。こうなると安全性についてもよろしくないです。
そこでProxyCommandというかncの出番です。
PC1の~/.ssh/configを編集 Host Server02 HostName Server02.network2.example.com ProxyCommand nohup ssh Server01.network1.example.com nc -w 10 %h %p
これでProxyCommandで設定したncがServer01で起動し、Server02へのアクセスを中継します。
パスフレーズはそれぞれ入力する必要があります。そこでssh-agentを使います。すると、
[user1@PC1:~]$ ssh Server02 Last login: Mon Jan 10 00:01:15 2009 from 192.168.111.254 [user1@Server02:~]$
コマンド一発で接続完了、いえーい。
ということはscpでファイルを送るのも一発です。それから以下のようなこともできます。
[user1@PC1:~]$ ssh Server02 "hostname && uptime" Server02.network2.example.com 14:48 up 7 days, 26 mins, 4 users, load averages: 0.43 0.16 0.10 [user1@PC1:~]$
設定はPC1だけで完結します。Server01とServer02にはauthorized_keys登録以外一切の設定はいりません。これなら公開鍵認証で安全性を確保しつつ、秘密鍵を中継サーバに持ち込むような手間は回避できます。
ssh万歳。