OpenSSH資料一覧

SSHの2つの認証方式の違い

2008/4/21更新

対応バージョン: 5

SSHの認証方式には「パスワード認証方式」と「公開鍵認証方式」2種類がある。

以下、それぞれの特徴とサーバ - クライアント間のセッションの流れについて説明する。

パスワード認証方式

メリット

サーバ側にあるアカウントのパスワードを知っていればよいのでクライアント側で特別な作業は不要

デメリット

暗号化されているとはいえ、パスワードがネットワーク上を流れるのでパスワードを盗まれる可能性がないとはいえない。
そもそもパスワードが第三者に知られてしまえば効果がない。

サーバ - クライアント間のセッションの流れ

使い方はtelnet等のサービスとほぼ同じで、ログインする際にパスワードを入力する。

この方式ではサーバとクライアントのセッションは以下のような流れになる。

1. クライアントがサーバに対して接続要求

2. サーバが公開鍵を提示するのでクライアントはそれを入手

3. クライアントはサーバの公開鍵を用いて自身が乱数を用いて生成した共通鍵(セッション鍵)を暗号化

4. クライアントは暗号化された共通鍵をサーバに送付

5. サーバは受け取った(暗号化された)共通鍵を自身の秘密鍵で復号化

6. サーバ - クライアント間で共通鍵の照合

7. クライアントは接続先アカウントのパスワードを共通鍵で暗号化してサーバに送付

8. サーバはそのパスワードを受け取ってユーザ認証

9. 以降、その共通鍵を使って暗号化通信

接続例)

host1% ssh foo@host2 

The authenticity of host 'host2 (XX.XX.XX.XX)' can't be established.
RSA key fingerprint is be:ed:4f:35:3b:96:92:4b:a8:ee:1c:38:b0:36:6e:54.
Are you sure you want to continue connecting (yes/no)? ← yes
Warning: Permanently added 'host2' (RSA) to the list of known hosts.
foo@host2's password: ← UNIXパスワード

→ ~foo/.ssh/known_hostsファイルにhost2の公開鍵が追加される。

(*) もし以下のようなメッセージが出て接続を拒否された場合は/etc/hosts.allow等のアクセス制御の設定を見直してみる。

ssh_exchange_identification: Connection closed by remote host

公開鍵認証方式

メリット

ネットワーク上をパスワードが流れる心配がないのでパスワード認証方式より安全

デメリット

前もってクライアントの鍵ペア(公開鍵、秘密鍵)を作成する必要があり、また公開鍵を接続先サーバに「安全に」届けておく必要があるのでパスワード認証に比べて最初の設定が面倒。

サーバ - クライアント間のセッションの流れ

操作方法はパスワード認証と同じだが、ログインする際にパスワード入力の必要がない。

公開鍵認証を有効にするためには前もって自身の公開鍵をサーバ側に登録する必要がある。

この方式ではサーバとクライアントのセッションは以下のような流れになる。

1. クライアントがサーバに対して接続要求

2. サーバ - クライアント間でお互いの公開鍵の照合

3. サーバは乱数を生成しクライアントの公開鍵を使って暗号化

4. サーバは暗号化された乱数をクライアントに送付

5. クライアントは受け取った(暗号化された)乱数を自身の秘密鍵で復号化

6. クライアント、サーバともに上記乱数からMD5でチェックサムを生成

7. チェックサムをサーバ - クライアント間で照合

8. 以降、暗号化通信

接続例)

まず自身の鍵ペアを生成する。

host1% ssh-keygen -d

Generating public/private dsa key pair.
Enter file in which to save the key (/home/foo/.ssh/id_dsa): ← リターン
Enter passphrase (empty for no passphrase): ← パスフレーズ
Enter same passphrase again: ← パスフレーズ再入力
Your identification has been saved in /home/foo/.ssh/id_dsa.
Your public key has been saved in /home/foo/.ssh/id_dsa.pub.
The key fingerprint is:
2b:e1:bd:ca:ef:90:9d:49:6d:71:3b:bd:ed:44:20:f6 foo@host1

host2% ← ログイン成功

→ ~/.sshにid_dsa(秘密鍵)、id_dsa.pub(公開鍵)が生成される。

このうちid_dsa.pub(公開鍵)を「安全な方法で」サーバ側にコピーし、~/.ssh/authorized_keysファイルに内容を追加する。

(*) authorized_keysは公開鍵の鍵束(キーチェーン)なので各クライアントの公開鍵の内容は同ファイルに上書きせずに追加していく必要があるので注意する。

次にサーバに接続してみる。

host1% ssh foo@host2

Enter passphrase for DSA key '/home/foo/.ssh/id_dsa': ← パスフレーズ

host2% ← ログイン成功

もしid_dsa.pubの内容がサーバ側に正しく設定されていない場合、自動的にパスワード認証に切り替わる。