質問1:〇〇.pemという鍵は一体何者なのか
SSH の認証で使われる秘密鍵ファイルです。
質問2:なぜEC2インスタンスの中にはauthorized_keysしかないのか(そもそもどういう仕組みでssh接続が行われているのか)
SSH の公開鍵認証では、接続時に共有した値に対してクライアントが秘密鍵で署名して送り、サーバ側がその署名が正しいものである事を公開鍵で検証出来たら認証された事になります。
サーバ側での認証に使用する公開鍵の置き場所が authorized_keys です。なのでサーバ側には authorized_keys のみがあればOKです。
クライアント側に公開鍵は必要か
別の回答についているコメントですが、誤解している人が多いので説明を書きます。
まず結論から書くと、クライアント側にも公開鍵は必要です。ただし公開鍵ファイルという形である必要はありません。
SSH ではクライアント(C)とサーバ(S)は以下のような手順(プロトコル)で公開鍵認証を行います。
- C: この公開鍵で認証を行っていい? (公開鍵を送る)
- S: OK/NGだよ (authorized_keysに登録されているか確認して回答する)
- C: この公開鍵で認証してね、署名はこれね (公開鍵と署名データを送る)
- S: OK/NGだよ (署名を検証して回答する)
上記のように、公開鍵認証を行う時はクライアントは公開鍵を送る必要があります。
しかし実際には OpenSSH の SSH クライアント(ssh コマンド)は秘密鍵ファイルがあれば公開鍵ファイルが無くても認証を行えます。
これは、秘密鍵ファイルの中には秘密鍵だけではなく公開鍵の情報も入っているからです。
ssh コマンドは公開鍵ファイルが無い場合はこの秘密鍵ファイルの中にある公開鍵を取り出して使うため、公開鍵ファイルが無くても認証が行えます。
秘密鍵ファイルに公開鍵の情報が入っている事は、以下のコマンドで秘密鍵ファイルから公開鍵が取り出せる事からもわかります。
ssh コマンドでは、公開鍵ファイルと秘密鍵ファイルの中の公開鍵では公開鍵ファイルの方を優先する為、公開鍵ファイルが壊れていたり、別の鍵の公開鍵だったりすると公開鍵認証が行えなくなるというのも覚えて置くといいと思います。
自分側に公開鍵が必要じゃないのかというのは、中々いい着眼点だと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/13 06:36