新しいキーを生成した後でも、クライアントはサーバー上でパスワードなしでSSHログインできます。

新しいキーを生成した後でも、クライアントはサーバー上でパスワードなしでSSHログインできます。

まずクライアント(Ubuntu 18.04)でキーを生成しました

$ ssh-keygen -t rsa -f .ssh/id_rsa

その後、それをサーバー(Ubuntu Server 18.04)にコピーしました。

$ ssh-copy-id 192.168.1.58

これで、サーバー上のキーを確認でき.ssh/authirized_keys、パスワードなしでログインできるようになりました。

その後、クライアントで新しいキーを生成し、以前のキーは上書きされました。しかし、パスワードなしでサーバーにログインすることはできます。キーが変更されたため、サーバーが私を検証しないと思っていました。何が足りないのでしょうか?

編集:

キーも外しました

$ rm .ssh/id*
$ ls .ssh/
known_hosts

まだログインできます

$ ssh 192.168.1.58
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage

System information as of Mon Mar 23 08:51:34 UTC 2020

System load:  0.0                Processes:              106
Usage of /:   42.8% of 12.31GB   Users logged in:        1
Memory usage: 6%                 IP address for enp0s3:  192.168.1.58
Swap usage:   0%                 IP address for docker0: 172.17.0.1


0 packages can be updated.
0 updates are security updates.


Last login: Mon Mar 23 08:46:19 2020 from 192.168.1.59

$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1[...]nr6eR33QK1BYeNT0BjyhRztd me@ubnutu-vm
$ w
08:53:57 up  2:10,  2 users,  load average: 0.06, 0.02, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
me       tty1     -                07:12   21.00s  0.35s  0.32s -bash
me       pts/0    192.168.1.59     08:51    1.00s  0.06s  0.00s w

編集2:

これは以下からのものですssh -v:

...
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:Db+pAR0Bc2kmZ9jju9zttSZDwfbEl4TM82AV7KSZ3DM /home/me/.ssh/id_rsa
debug1: Server accepts key: pkalg rsa-sha2-512 blen 279
debug1: Authentication succeeded (publickey).
Authenticated to 192.168.1.58 ([192.168.1.58]:22).
...

id_rsaフォルダー内にファイルはありませんが/home/me/.ssh/、何らかのキャッシュが関係しているのではないかと考え、クライアントを再起動した後、パスワードを入力する必要があります。

再起動後は次のようになりますssh -v:

...
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/me/.ssh/id_rsa
debug1: Trying private key: /home/me/.ssh/id_dsa
debug1: Trying private key: /home/me/.ssh/id_ecdsa
debug1: Trying private key: /home/me/.ssh/id_ed25519
debug1: Next authentication method: password
[email protected]'s password:

そのため、再起動が必要でした。

答え1

続く@fraさんのアドバイスに従って、もう少し深く調べてみたところ、次のような結果が得られました。

これはhttps://www.ssh.com/ssh/agent

デフォルトでは、エージェントはユーザーのホーム ディレクトリの下の .ssh ディレクトリに保存されている SSH キーを使用します。エージェントに ID を追加するには、ssh-add コマンドを使用します。最も単純な形式では、引数なしで if を実行して、デフォルトのファイル ~/.ssh/id_rsa、.ssh/id_dsa、~/.ssh/id_ecdsa、~/.ssh/id_ed25519、および ~/.ssh/identity を追加します。それ以外の場合は、追加する秘密キー ファイルの名前を引数として指定します。

次のコマンドは、エージェントが現在アクセス可能な秘密鍵を一覧表示します。

ssh-add -l

サーバーに接続すると、ssh-add -l次のように表示されます。

$ ssh-add -l
2048 SHA256:rzgw39XLAT0NHof4RBXFU/ahKhFWlH8FqMgNxBX2SAE /home/me/.ssh/id_rsa (RSA)

id_*フォルダー内のキーが.ssh/変更または削除された場合でもssh-add -l、同じ出力が表示され、将来の接続に使用されます (少なくとも私の場合は)。

その時点で、再起動または次のコマンドのいずれかを実行すると、キャッシュされたキーが削除されます。

$ ssh-add -d /home/me/.ssh/id_rsa
Identity removed: /home/me/.ssh/id_rsa (me@ubnutu-vm)

または

$ ssh-add -D
All identities removed.

新しい接続に対してパスワードプロンプトが表示されます。

アップデート:

これはhttps://man.openbsd.org/ssh_config.5#エージェントにキーを追加する:

エージェントにキーを追加

実行中の ssh-agent(1) に鍵を自動的に追加するかどうかを指定します。このオプションが yes に設定され、鍵がファイルからロードされた場合、鍵とそのパスフレーズは、ssh-add(1) の場合と同様に、デフォルトの有効期間でエージェントに追加されます。このオプションが ask に設定されている場合、ssh(1) は鍵を追加する前に SSH_ASKPASS プログラムを使用して確認を求めます (詳細については ssh-add(1) を参照してください)。このオプションが confirm に設定されている場合、ssh-add(1) に -c オプションが指定された場合と同様に、鍵を使用するたびに確認する必要があります。このオプションが no に設定されている場合、エージェントに鍵は追加されません。引数ははい確認する聞く、 またはいいえ(デフォルト)。

関連情報