クライアントコンピュータで公開/秘密鍵のペアを作成しました。ホストファイルに公開鍵を追加すると、パスワードを入力しなくてもSSHを正常に実行できるようになりました~/.ssh
。id_rsa
id_rsa.pub
authorized_keys
これで公開鍵をそのフォルダから移動しmv ~/.ssh/id_rsa.pub ~/
、ホストにSSHを再試行しました。失敗すると予想しましたが(公開鍵が欠落しているため)まだ機能します!どうですか?ディレクトリにない場合は、公開鍵をどのように見つけますか~/.ssh
?ホームフォルダ外の別の場所に移動してみましたが、パスワードの確認が成功せずに接続され続けます。
答え1
ssh-agentによってキーがキャッシュされていないことを確認してください。
キャッシュされたキーのリストを取得します。
ssh-add -l
キャッシュされたキーをすべて削除します。
ssh-add -D
答え2
公開鍵暗号化は公開鍵を提供し、秘密鍵は秘密にします。誰かがあなたに何かを送ろうとするとき、彼らは自分の公開鍵を使ってそれを暗号化し、あなたは秘密鍵を使ってそれを復号します。公開鍵を提供すると、メッセージを復号化するために公開鍵は必要ありません。
sshがこれらのキーを使用する方法の詳細についてはわかりませんが、その-v
オプションを使用すると、次の内容が表示されます。
$ ssh -vvv vm
...
debug1: identity file /Users/username/.ssh/id_rsa type 0
...
debug1: Offering public key: /Users/username/.ssh/id_rsa RSA SHA256:...
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 60
debug1: Server accepts key: /Users/username/.ssh/id_rsa RSA SHA256:/...
これを考慮すると、秘密鍵を使用して公開鍵を取得し、公開鍵をリモートホストに送信するようです。
この構成を無効にするには、秘密鍵(~/.ssh/id_rsa
)を[削除]する必要があります。
答え3
リモコンにまだ公開鍵(~/.ssh/authorized_keys
)があるとおっしゃいました。そしてローカルにも秘密鍵(~/.ssh/id_rsa
)があります。
それはすべてです。
はい(他の回答の説明)プロトコルは、入るまで利用可能なすべてのキーを試します。
ハッシュを送信することは、キーをより早く見つける方法です。リモコンはすべての公開鍵をハッシュし、ハッシュを比較し、一致する鍵を使用します。公開鍵は秘密鍵(ファイル)から派生できます。
debug1: Offering public key: /Users/username/.ssh/id_rsa RSA SHA256
クライアントが秘密鍵ファイルから公開鍵ハッシュを派生していることを示します。したがって、公開鍵があるか、公開鍵が秘密鍵から派生する可能性があります(鍵の種類によって異なります)。
答え4
(公開鍵が失われたため)失敗すると予想され、再びSSHを介してホストに接続しようとしましたが、まだ機能しました!どうですか?
公開鍵をリモートサーバーに送信した後(そしてリモートサーバーがそのファイルauthorized_keys
に公開鍵を保存した場合)、公開鍵ファイルはもう必要ありません。認証に必要なのは秘密鍵だけです。
もちろん、公開鍵ファイルをアーカイブすることをお勧めします。しかし、RSA秘密鍵には公開鍵が含まれているためを使用すると、いつでも秘密鍵ファイルから公開鍵ファイルを抽出できます。
特に、RSA秘密鍵の内容は次のとおりです。
-----BEGIN RSA PRIVATE KEY-----
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
-----END RSA PRIVATE KEY-----
RSA公開鍵の内容は次のとおりです。
-----BEGIN RSA PUBLIC KEY-----
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
-----END RSA PUBLIC KEY-----