生成新密钥后,客户端仍然可以无密码 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,则不会将任何密钥添加到代理。参数必须是是的,确认,, 或者(默认)。

相关内容