为什么更改用户密码时不需要重新生成密钥?

为什么更改用户密码时不需要重新生成密钥?

我们有一个 Linux 机器(Ubuntu,但这应该不重要),比如说,somemachine.example.com,以及一个有权访问该机器的用户,someuser

我可以通过明确提供密码来 SSH 到该机器,如下someuser所示:

ssh [email protected]
Password: *****

...或通过提供 PEM 文件(公钥):

ssh -i ~/path/to/somemachine.pem [email protected]

今天我不得不更改someuser该盒子的密码(使用passwd命令),并且有点惊讶地发现我不必为该用户重新生成新的密钥对(因此,新的 PEM 文件)。

我想知道:为什么?someuser的密码和公钥/私钥之间根本没有联系吗?如果是这样,Linux 是否为每个用户维护一组证书,这可以是密码或公钥? Linux 如何将密钥和密码与特定用户相关联?

答案1

ssh在几乎任何类 Unix 系统上,密钥和登录密码都存储在不同的位置。没有理由(除了 30 年的历史) ssh) 两者不可能使用相同的存储。但我们现在拥有的是分开的,分散地尝试将凭证集合存储在密钥管理器中。

通常用户的ssh信息位于$HOME/.ssh,而登录信息位于/etc/passwd,/etc/shadow/,/etc/group/etc/gshadow

关键经理可以通过根据需要提供密码(或类似信息)来组合这些内容。但这是例外,而不是规则。

不是以某种方式推荐它,我与军鼓工厂一会儿回来。如果你用谷歌搜索一下,它会在 2000 年左右出现。它收集了各种应用程序(或远程系统)的凭据,并将该集合与用户相关联。

答案2

SSH 密钥根本不与用户密码相关联,它们是两种完全独立的身份验证机制。当使用 ssh 密钥时,sshd 会查找$HOME/.ssh/authorized_keys$HOME/.ssh/authorized_keys2查找要尝试的公钥。这些公钥与客户端上的私钥以及一些地穴魔法对用户进行身份验证。

当 ssh 使用密码验证时,它使用 PAM 进行验证。 PAM 可以通过多种方式验证使用情况,但最常见的是使用本地用户登录。本地用户登录凭据存储在 中/etc/passwd,其密码存储在 中/etc/shadow,组信息存储在 中/etc/group

相关内容