2011年12月9日金曜日

sshを公開鍵認証にする(複数ホスト対応)

どうも、俺@仕事中です。忙しいです><

社内でもssh管理は「鍵認証にしよう!」ということで、今日はその対応方法についてめもです。
パスワード接続だとちょっと不安ですしね。

まずはサーバ上でnew_userというログインユーザを作ります。(既存のもので対応する場合は必要なし)
<サーバ>
# useradd -d /home/new_user -s /bin/zsh -g goup_name new_user


次にOPEN-SSLで鍵ファイルを作成します。公開鍵はサーバ上に、秘密鍵はクライアントに置きます。
作成する場所はどちらでも構いませんが、分かりやすいので今回はクライアント側で作ることにします。
<クライアント>
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):
そのままEnterでも良いが、複数ホストに対応する場合はファイル名を変えたほうが良いので今回は「id_rsa.hostA」と打ちます。
Enter passphrase (empty for no passphrase):
パスフレーズを入力(必要ない場合はそのままEnter)
Enter same passphrase again:
再度パスフレーズ入力
これでファイルが2つ生成されるはずです。
・id_rsa.hostA 秘密鍵。クライアントの.ssh以下へ置く。
・id_rsa.hostA.pub 公開鍵。サーバの.ssh以下へ置く。

では公開鍵をサーバへFTPなどで持って行き、該当のユーザ(この例ではnew_user)の.sshディレクトリ以下へ保存しておきます。説明は省略。
またその内容をauthorized_keysファイルへ追記します。
<サーバ>
$ cat id_rsa.hostA.pub >> ~/.ssh/authorized_keys
とりあえずここでSSHの鍵認証が可能です。
あとはセキュリティのため、サーバのsshd_configの設定を変更し、パスワードによるログインができなくしましょう。
<サーバ>
# cd /etc/ssh
# cp sshd_config sshd_config.bak // バックアップを取る
# vim /etc/ssh/sshd_config
---------------------------------
# 以下3つはコメントアウトのままでもデフォルトで問題ない
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# noに変更する!
PasswordAuthentication no
これでOK。
設定を反映させます。
<サーバ>
# /etc/init.d/sshd restart
これでパスワードによるログインはできなくなり、公開鍵でのログインができるようになりました。

ちなみに接続方法は
<クライアント>
$ ssh new_user@hostA -i ~/.ssh/id_rsa.hostA
になります。鍵ファイルにパスフレーズを設定している場合は、入力を求められます。

ただしこの方法だと、管理する複数のホストで鍵認証する場合、都度「-i オプション」で鍵ファイルを明示的に指定しなければいけません。面倒です。
なので.ssh/configに設定を書いておき、楽しちゃいましょう。

<クライアント>
$ vim ~/.ssh/config
---------------------------------
Host serverA
  # HostNameはドメインまたはIPアドレス
  HostName hostA.com
  Port 22
  User new_user
  IdentityFile ~/.ssh/id_rsa.hostA

Host serverB
  HostName hostB.com
  Port 22
  User foo_user
  IdentityFile ~/.ssh/id_rsa.hostB

Host serverC
  HostName xxx.xxx.xxx.xxx
  Port 22
  User bar_user
  IdentityFile ~/.ssh/id_rsa.hostC
こんな感じです。
これであれば、例えばhostB.comへ接続する場合
<クライアント>

$ ssh serverB
と打つだけで、
・hostB.comへ
・foo_userで
・22番ポートで
・~/.ssh/id_rsa.hostBの秘密鍵を使って
接続を試みてくれます。

楽チンですねーー!以上でぇぇぇええぇす。

0 件のコメント: