產生新金鑰後,用戶端仍可無密碼 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 金鑰。 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#AddKeysToAgent

新增密鑰到代理

指定是否應將密鑰自動新增至正在運行的 ssh-agent(1)。如果此選項設為 yes 並且從檔案載入金鑰,則金鑰及其密碼短語將以預設生命週期新增至代理程式中,就像透過 ssh-add(1) 一樣。如果此選項設定為詢問,則 ssh(1) 將需要在新增金鑰之前使用 SSH_ASKPASS 程式進行確認(有關詳細信息,請參閱 ssh-add(1))。如果此選項設定為確認,則每次使用該金鑰都必須確認,就像為 ssh-add(1) 指定了 -c 選項一樣。如果此選項設為 no,則不會將任何金鑰新增至代理程式。參數必須是是的,確認,, 或者(預設).

相關內容