我们有一个 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
。