01 October 2012

ssh でパスワードではなく、公開鍵暗号によってログインする方法。

動作の仕組み

  1. サーバーは接続してきたユーザーの公開鍵を ~/.ssh ディレクトリから取り出す。 「乱数」を生成し、その乱数を公開鍵で暗号化してクライアントに送る
  2. クライアントは、サーバーから送られてきた乱数を、秘密鍵で復号化し、サーバーに送り返す
  3. サーバーは自分が作った乱数と、クライアントから戻ってきた値を照合し、一致すれば正しいユーザーと判断する

設定方法

クライアント側

$ ssh-keygen -t rsa

途中でパスフレーズ入力を求められる。 パスフレーズは秘密鍵を取り出すときに必要になります。 パスフレーズは省略もできます。

秘密鍵 ~/.ssh/id_rsa および 公開鍵 ~/.ssh/id_rsa.pub が生成される。

どんな方法でもよいので、公開鍵を ssh サーバーに送る。 (公開鍵なので、途中で傍受されてもよい。)

サーバー側

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

うっかりしやすいのが、 authorized_keys のパーミッションです。 group に write permission がついているとうまくいきません。

$ chmod  go-w ~/.ssh/authorized_keys

のようにしておきます。

これ以降、公開鍵暗号方式でssh接続できる。 パスフレーズを省略していると、(セキュリティ的に脆弱だが)パスワードをいちいち入れずに、sshでログインできるようになる。



blog comments powered by Disqus