sshによるnon path設定メモ

たくさんのサーバーを管理していると、多くのサーバーに同一の事をしなくてはいけない用件が多々あると思います。

用件によっては、以下のようして、公開鍵と秘密鍵を作成して、ログイン先に公開鍵を置き、ログイン元のサーバーに秘密鍵を置き、ノンパスでログインするようにする事があると思います。(同じネットワーク内のサーバー同士の時などで)

# SSH2の鍵の作成
$ssh-keygen -t rsa -N ""
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): 
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
・・・
# 公開鍵をauthorized_keysに追加
$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# パーミッションを自分だけが読めるようにする。
$chmod 600 ~/.ssh/authorized_keys

上記の事を行い、作成した秘密鍵(id_rsa)をログイン元サーバーに置き、そのファイルを指定すれば(~/.ssh/以下に置けば指定しなくても自動でファイルが適用される)sshの際に秘密鍵と公開鍵の認証が行われるようになります。
ただ、この際実際にノンパスでログインしようとすると、最初に以下のような事が聞かれます。

$ssh  ~/.ssh/id_rsa @servername
・・・
Are you sure you want to continue connecting (yes/no)? 

ここで、yesをすると、/home/username/.ssh/known_hostsファイルにフィンガープリントが挿入され、晴れてノンパスでログインできるようになります。


ただ、運用を行っていて、サーバーが一気に増えたときにknown_hostsへの追加をいちいち1台ずつ行っていては面倒です。100台のサーバーにいちいちsshを行い、yesを行っていては時間の無駄です。

で、今回は一度に多くのサーバーを追加する方法があったので、どのように行ったかを忘れないように書きます。(公開鍵が全てのログイン先サーバーに置かれている事が前提です。)

作業は、簡単で、サーバーのリストを作成して、各サーバーに対するフィンガープリントをssh-keygenというコマンドを用いて出力し、それをknown_hostsファイルに上書いていきます。

# ログイン用サーバーのリストの作成
$vim server.txt
server1
server2
server3
・・・
#フィンガープリントの作成とknown_hostsへの書き込み
$bash -c "ssh-keyscan  -f servers.txt" >> ~/.ssh/known_hosts

と、これだけです。
このようにして、全てのフィンガープリントを一気にknown_hostsへ追加する事ができます。

逆に、known_hostsのファイルから指定のドメインのフィンガープリントを行いたい場合は、以下のようなコマンドで行えます。

$ ssh-keygen -R domainname

番外

フィンガープリントの追加を自動で行う方法

StrictHostKeyChecking yes

ついでに、sshには、configファイルを持つ事ができます。
デフォルトでは下のようにファイルの読み込みを行いますが、

/etc/ssh/ssh_config
↓
~/.ssh/config
  • F オプションで、自分の指定した設定ファイルを読む事ができます。

複数のサーバーで作業する事が多いときは、このconfigファイルをうまく使うと運用が楽になります。

# ~/.ssh/config
# sshの際にs1と入力すると、実際のホスト名 server1.com に、~/.ssh/server1.identityという秘密鍵を使って、ログインを行おうとする。
Host s1
    Hostname server1.com
    IdentityFile ~/.ssh/server1.identity
# server2にログインする際は、hogehogeユーザーで、~/.ssh/server2.hogehoge.identityの秘密鍵を用いてログインする。
Host server2
    Hostname server2.com
    User hogehoge
    IdentityFile ~/.ssh/server2.hogehoge.identity

設定項目などについては下のページが詳しいです。
http://www.unixuser.org/~euske/doc/openssh/jman/ssh_config.html