私が知っているのは、マシン(A)がssh-keygen
キーを生成し、ssh-copy-id
そのキーを別のマシン(B)に渡すのではありませんか?
ただし、これを実行した後に完了したかどうかをテストするには、sshを使用します。例:root @ A:ssh root@B
これはパスワードなしでBにログインした場合に機能します。
私はこれについて混乱しています。 AはBに鍵を与えましたが、なぜAはパスワードなしでBにログインできますか?これでBにログインできます。 Bにはssh A
パスワードは必要ありません。
私の理解が間違っていますか?
答え1
SSH 鍵は、非公開部分と公開部分の 2 つの部分で構成されます。これがまさに一緒に動作するキーペアである「キーペア」と呼ばれる理由です。
ssh-copy-id
秘密鍵と公開鍵のペアのPUBLIC部分を~/.ssh/authorized_keys
リモートホストにコピーします。
秘密鍵を持っていてパスワードを知っている人は、誰でもパスワードなしでそのリモートホストにログインできます。
常にパスワードを再入力する必要がないように、秘密鍵を保存するプログラムなどのssh-agent
プログラムを使用できます(簡単に言えば、パスワードでロックを解除した後に秘密鍵をキャッシュします)。秘密鍵は、あなたがそうしないように指示するか、エージェントを殺すか、ログアウトするまで保持されます。望むよりman ssh-agent
。
セキュリティの観点から見ると、キーペアのPUBLIC部分は特に敏感ではありません。危険なしに配布および開示されることがあります。一致する秘密鍵(および秘密鍵のパスワード)がなければ、ほとんど役に立ちません。
もちろん、鍵ペアの秘密部分は秘密にしておく必要があります。
答え2
欠けているのは、ssh-copy-id
公開鍵をBにコピーするだけでなく、アカウントへのアクセスを許可されている鍵のリストに公開鍵を追加することです(~/.ssh/authorized_keys
)。を実行した後、ssh-copy-id
キーはBのどこかに保存されるだけでなく、Bにも認証されたログイン方法で登録されます。
秘密鍵はAにあり、SSHクライアントに渡す必要があります(inまたはviaを使用して検索を許可し~/.ssh/id_*
、-i
コマンドラインオプションを渡すことによって実行できます)。公開鍵はBにあります。 AからBにログインすると、SSHクライアントはBに秘密鍵所有証明を送信し、Bはログイン試行を承認するために見つかった公開鍵と所有証明を関連付けます。IdentityFile
~/.ssh/config
ssh-agent
~/.ssh/authorized_keys
~/.ssh/authorized_keys
答え3
AはBに鍵を与えましたが、なぜAはパスワードなしでBにログインできますか?
あなたは正しいです。
SSHは着信接続を受信すると、さまざまな方法でユーザーを認証できます。これは設定可能です。一般的なアプローチは、ユーザーが〜/ .ssh / authorized_keys *ファイルに公開鍵を持っていることを確認し、一致する秘密鍵を受け入れることです(すべての詳細が受け入れられると仮定します(ファイルに許可されている権限など)。 )。鍵が設定されていない場合、またはSSHクライアントがSSHクライアントに一致する秘密鍵があることを証明するために許容可能な詳細を提供できない場合、SSHサーバーは「パスワード」(または「パスワードフレーズ」)を求めるメッセージを表示します。します。
ssh-copy-idは、基本的に手動で行うのが難しくない操作を実行する命令です。 SSH を使用してリモートシステムに接続し、公開鍵を ~/.ssh/authorized_keys* ファイルに保存します。
ssh-copy-idの使い方を学んだ後は、この作業を手動で行う方法を学んだので、このプログラムが私にとってあまり役に立たなかったので、すぐに忘れました。もちろん、ssh-copy-idを使用する方が少し簡単で高速です。しかし、これは非常に不要です。追加の利便性が他の命令を学ぶ努力に比べて価値があるかどうかは疑問です。
ssh-copy-idは、ユーザーが手動で(他のSSHクライアントを使用して)パスワードを入力するのと同じように、ユーザーにパスワードを入力するように要求できます。一般的な認証要件をバイパスしません。
(もちろん、ssh-copy-idが操作を完了したら、SSHキーがインストールされて使用する準備が整います。)
B、B ssh A にログインしてもパスワードは必要ありません。
Bにログインしてから(パスワードを使用)、SSHを使用して(シェルとして使用するか、SCP / SFTPなどのSSHプロトコルを使用)、Aからキーをインポートできます。はい、これも動作します。パスワードが必要かどうかは、Aの設定によって異なります。 Aが公開鍵を持ち、Bがそれに対応する秘密鍵を持っている場合、Bはパスワードを入力する必要はありません。
キャスの答え上記のssh-agent(質問には指定されていません)これは基本的に別のアプローチです。 ssh-agent は秘密鍵を保存します。暗号化されている可能性があるため、復号化された秘密鍵にアクセスするにはパスワードを入力する必要があります。 SSHを使用すると、SSHサーバーはssh-agentが認識する操作を実行し、ssh-agentは必要な詳細をSSHサーバーに提供できます。アイデアは、ssh-agentが設定されたら、パスワードを一度入力した後(キーへのアクセスを復号化するため)、長い間パスワードを再入力することなく、一日中別の接続を作成できることです。 ssh-agent が実行される時間です。これは主にSSHクライアントを使用するエンドユーザーエクスペリエンスに関するものなので、SSHサーバーで多くのことを行う必要はありません(他の方法はすでに説明したように公開鍵設定に加えて)。