これはあまりにも単純すぎるようで、明白なことを見逃しているような気がしますが、キー ペアを生成せずに SSH を使用すると実際に何が起こるのでしょうか?
この質問のバリエーションが尋ねられたここそして、回答と同様に、キー ペアがないと SSH はパスワード認証にフォールバックすることを私は常に理解していました。
しかしウィキペディアの記事使用方法が 2 つだけ説明されています。どちらもキー ペアを使用するようです。1 つは手動で生成され、もう 1 つは自動的に生成されます。
SSH を使用する方法はいくつかあります。1 つは、自動的に生成された公開キーと秘密キーのペアを使用してネットワーク接続を単純に暗号化し、パスワード認証を使用してログオンする方法です。
もう1つは、手動で生成された公開鍵と秘密鍵のペアを使用して認証を実行し、ユーザーまたはプログラムがパスワードを指定せずにログインできるようにすることです。
キーペアなしでセキュリティ保護されていないサーバーに SSH 接続を作成すると、ユーザー名とパスワードの入力が求められ、その後シェルにアクセスできるようになります。
パスワード フォールバックは実装の詳細であるため、Wiki には記載されていませんか? 提案されているように、キー ペアは自動的に生成されましたか (その場合、公開キーはどのようにしてサーバーに到達しましたか)? または、パスワードのみで実行されますか。
パスワードとユーザー名の組み合わせのみを使用している場合、データは暗号化されていますか? 暗号化されている場合、どのように暗号化されていますか?
答え1
Wikipediaの記事はSSHv2の異なるレイヤーを混同しています。(幾分10 年前の SSHv1 では正しいものでしたが、今では明らかに意味不明なレベルまで単純化されています。
SSHv2の鍵ペアは、あなたのものとサーバーのものの両方が、認証のみ暗号化の設定は、接続ごとに一時的に生成されたDHキーペアを使用して行われます。サーバーのSSHキーペアのみ標識暗号化設定データ(サーバーの ID を証明するため)が使用されますが、クライアントの SSH キー ペアはこのプロセスではまったく使用されません。
SSHv2では、サーバーに接続すると(両端がサポートされているアルゴリズムのリストを交換した後)、最初のステップは鍵交換これにより、接続全体を暗号化するために使用される対称キーが何らかの方法で生成されます。(このプロセスの副作用として、サーバーも認証されます。)
ほとんどの時間D~HまたはECDHこれに使用されます。つまり、
クライアントは DH キー ペア (この接続にのみ使用) を生成し、DH 公開キーを送信します。
サーバーは新しい DH キー ペアも生成します。また、ディスクから SSH「ホスト キー」キー ペアも読み込みます。
それから標識DH 公開鍵と SSH 秘密鍵を同期し、両方の公開鍵 (および署名) をクライアントに送信します。
クライアントは署名をチェックし、サーバーの SSH 公開鍵が known_hosts にあることを確認します。
そして両方を使うDHキー (クライアントの秘密キー + サーバーの公開キー) を使用して共有暗号化キーを生成し、DH キー ペアを破棄します。
サーバーは、両方の DH キー (サーバーの秘密キー + クライアントの公開キー) を使用して同じ共有暗号化キーを生成し、DH キー ペアも破棄します。
両側で暗号化が有効になります。
(他の鍵交換方法もいくつかありますが、あまり使用されません。)
次のステップはクライアント認証この時点では、クライアントの SSH キーがまだ使用されていないにもかかわらず、接続はすでに暗号化されていることに注意してください。
クライアントはクライアント認証のために「サービス要求」を送信します。
サーバーは、「パスワード」、「公開鍵」、その他いくつかのメカニズムを提供します。
SSH キー ペアがある場合、クライアントは「公開キー」を選択し、SSH 公開キーを送信し、SSH 秘密キーを使用してサーバーから提供されたランダム データに署名し、キーの所有権を証明します。
SSH キー ペアがない場合は、クライアントは「パスワード」を選択し、パスワードを直接送信します (ただし、暗号化されたトンネル内のままです)。