質問: 公開鍵と秘密鍵 サーバ側で ssh-keygen -t rsa と入力すると,公開鍵と秘密鍵が生成されますが どうしてクライアント側に秘密鍵をもたせるのでしょうか? 逆でも通信できる気がします. あと,サーバ1台に対して,クライアントが複数いる場合に 公開鍵と秘密鍵のペアはクライアントの人数分生成するのが適切なのでしょうか? (複数のサーバに1台のクライアントが接続する場合も,各サーバが1台のクライアントに対して公開鍵・秘密鍵を生成するのが適切なのでしょうか?) よろしくおねがいします.
回答: お互いが正しく通信する(なりすましを防ぐ)ためにはサーバ側もクライアント 側も認証されている必要があります。 サーバ側の秘密鍵はサーバの/etc/sshd の下あたりにあるはずです。クライアン トが初めてサーバに接続したときに、サーバ鍵の公開鍵がクライアントに送られ ます。これを受けて、クライアント側ではその鍵を受け入れるかどうかのポップ アップが表示されるのが普通です。(本当はあらかじめ安全な方法でクライアン ト側に送付しておき登録することが望ましいのですが・・・) 同じようにクライアント側も認証されなければなりません。(rsa 認証の場合) クライアントを認証するために、クライアント側で(※)生成したキーペアのう ち、公開鍵をサーバ側に送り、サーバ側のauthorized_keys2 ファイル(openssh の場合)にその内容を記録します。 ※クライアント環境にキーペア生成ツールがない場合、便宜上サーバ上でキーペ アを作成することもできます。 > どうしてクライアント側に秘密鍵をもたせるのでしょうか? 既にお分かりかもしれませんが、クライアント(利用者)を認証するためです。 クライアント側にパスワードを求めるアクションと同じと考えていただいて構いません。 > あと,サーバ1台に対して,クライアントが複数いる場合に > 公開鍵と秘密鍵のペアはクライアントの人数分生成するのが適切なのでしょうか? 誰からの接続かをサーバ側で判別できないと意味がないので、そういうことにな ります。クライアントの人数分生成するのが適切な運用です。 > (複数のサーバに1台のクライアントが接続する場合も,各サーバが1台のク > ライアントに対して公開鍵・秘密鍵を生成するのが適切なのでしょうか?) いいえ。使い回しできます。aさんのサーバ1、2、3へのアクセスを許可した いなら、aさんの公開鍵をサーバ1、2、3で信用するように(authorized_keys2 ファイルに書く)すればよいのです。 ところで、クライアント=台数ではなく、クライアント=ユーザであるべきです。 すなわち、クライアント1台でもマルチユーザならクライアント数は1ではない ということです。もちろん、誰もが同じ認証条件と言うことであれば1としてし まっても問題ありません。