SSHで公開鍵認証

SSHで公開鍵認証をするためのまとめ。

公開鍵を作成

$ ssh-keygen -t rsa

-t で指定できる暗号化方式には他にdsaやrsa1があるみたいだけど
dsaは強度がイマイチ、SSH2を使いたいのでrsaにしとく。(SSH1の場合はrsa1を指定)
実行結果:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/nauthiz/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/nauthiz/.ssh/id_rsa.
Your public key has been saved in /Users/nauthiz/.ssh/id_rsa.pub.

途中で訊かれるパスフレーズは、SSHでログインする時に必要。
実行後、秘密鍵は~/.ssh/id_rsa、公開鍵は~/.ssh/id_rsa.pubに保存されてる。

.sshディレクトリと秘密鍵のパーミッションを変更。

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa

接続先サーバに公開鍵を登録

scp等で、秘密鍵(~/.ssh/id_rsa)を接続先のサーバに保存。
公開鍵認証を利用するユーザのホームディレクトリに.sshディレクトリを作成。

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

~/.ssh/authorized_keysに公開鍵追記すれば、登録完了。
はじめてauthorized_keysを作成する場合はパーミッションも変更しとく。

$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

次回からSSHを実行すると、パスフレーズを聴かれるので
ssy-keygenに入力したものと同じパスフレーズを入力すればログインできる。

パスワード認証を無効化

通常のパスワード認証を無効化して、公開鍵認証のみにする場合
/etc/ssh/sshd_configにある次の項目を変更。

PasswordAuthentication no

その後、SSHデーモンに設定をリロードさせればOK。

# service sshd reload

番外: 複数の鍵を使い分ける

SSHではデフォルトで~/.ssh/id_rsaを秘密鍵として使用する。
でも自宅サーバレンタルサーバのように同じ秘密鍵を使いたくないことってあるよね。
そんな場合は、ssh-keygenの-fで秘密鍵・公開鍵を別の場所に作成し

$ ssh-keygen -t rsa -f ~/.ssh/hoge/id_rsa

例の出力先:

  • 秘密鍵: ~/ssh/hoge/id_rsa
  • 公開鍵: ~/ssh/hoge/id_rsa.pub

sshの-iオプションで指定すれば利用する秘密鍵を切り替えられる。

$ ssh <接続先サーバ> -i ~/ssh/hoge/id_rsa