sshの秘密鍵を一カ所で管理する方法

多数のサーバに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万歳。