SSH の仕組み
それぞれの「公開鍵」や「共通鍵」や「電子署名」の説明については以下の記事をご覧ください
以降では上記の手順について順番に説明を行います。
ssh コマンド
以下の一番最初にある「ssh コマンド」について説明します。
サーバーに接続する ssh コマンドは「ssh <ユーザー名>@ -i <秘密鍵のパス>」です。
具体的な値を入れると以下のとおりです。
サーバーから公開鍵を受け取る
以下のサーバーからクライアントに「公開鍵Bをあげる」にあたります。
- サーバーは、公開鍵B(/etc/ssh/ssh_host_ecdsa_key.pub )をクライアントに渡す
- クライアントは、受け取った公開鍵Bを ~/.ssh/known_hosts で照合
- ~/.ssh/known_hosts に無い場合は、初めてアクセスするサーバーなので確認画面を出す
確認画面は以下のとおりです。
The authenticity of host '192.0.2.1 (192.0.2.1)' can't be established. ECDSA key fingerprint is SHA256:123456789abcdefgh. Are you sure you want to continue connecting (yes/no)?
「ホスト名」と「公開鍵のハッシュ値(フィンガープリントと呼びます)」を表示して、「本当に正しいアクセス先か?」をユーザーに確認します。
「yes」を入力すると、~/.ssh/known_hosts に追記し共通鍵を生成後、認証フェーズに入ります。
共通鍵の詳細については以下の記事をご覧ください。
ssh フィンガープリントの確認
サーバー側で以下のコマンドを実行すると、サーバーから送られてくる公開鍵Bのフィンガープリントを確認可能です。
256 SHA256:123456789abcdefgh
クライアント側でも、known_hosts に登録されている公開鍵のフィンガープリントを確認可能です。
256 SHA256:123456789abcdefgh 192.0.2.1 (ECDSA)
電子署名による認証
以下のクライアントが「電子署名をあげる」を実施し、「authorized_keys に公開鍵Aがあるかチェックする」部分にあたります。
拒否されると以下のメッセージが表示され、ssh に失敗します。
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
そのため、以下のコマンドで ~/.ssh/authorized_keys にクライアントの公開鍵を登録する必要があります。
電子署名の詳細については以下の記事に記載があります。
上記は conf.d/* 配下の設定ファイルを全て取り込みます。
参考サイト
SSH2のログインシーケンス クライアント サーバ TCP/22接続 (TTSSH) (OpenSSH) バージョン情報交換 - ppt download
SSH2のログインシーケンス(続き) クライアント サーバ (TTSSH) (OpenSSH) 認証リストの要求 “none”メソッド SSH2_MSG_USERAUTH_REQUEST CheckAuthListFirstが有効なとき (無効なときは、クライアントはユーザ操作による認証失敗により認証リストを得られる)...
SSHの公開鍵認証に関する誤謬と実際 - Chienomi
SSHの公開鍵認証における良くある誤解の話 - Qiita
はじめに背景これを知っていたからと言って何かの役に立つかというと、そうでない人の方が多いとは思うのですが、いい加減、SSHの公開鍵認証の説明がデマばかりなので、少しはちゃんとした説明もあった方が…