Linux 为什么UNIX用户必须有密码?

Linux 为什么UNIX用户必须有密码?,linux,unix,ssh,public-key-encryption,openssh,Linux,Unix,Ssh,Public Key Encryption,Openssh,我正在raspberry pi上配置ssh服务器,以便它只支持基于密钥的身份验证 我已经在服务器上创建了一个用户,并使用我的公钥和正确的权限设置了~/.ssh目录 用户当前被标记为“已锁定”,因为它没有密码。这会导致openssh拒绝连接 # /var/log/auth.log Aug 9 09:05:26 raspberrypi sshd[6875]: User foo not allowed because account is locked Aug 9 09:05:26 raspbe

我正在raspberry pi上配置ssh服务器,以便它只支持基于密钥的身份验证

我已经在服务器上创建了一个用户,并使用我的公钥和正确的权限设置了~/.ssh目录

用户当前被标记为“已锁定”,因为它没有密码。这会导致openssh拒绝连接

# /var/log/auth.log

Aug  9 09:05:26 raspberrypi sshd[6875]: User foo not allowed because account is locked
Aug  9 09:05:26 raspberrypi sshd[6875]: input_userauth_request: invalid user foo [preauth]
Aug  9 09:05:26 raspberrypi sshd[6875]: Connection closed by 192.168.0.4 [preauth]
理想情况下,我不需要密码。我已经通过PKI进行了身份验证

也许我可以将密码设置为“password”,或者一个随机字符串,但这看起来很混乱

有什么建议吗

编辑:

只是想澄清一下,我的帐户被锁定是因为它没有密码,即

$ passwd -u foo
passwd: unlocking the password would result in a passwordless account.
You should set a password with usermod -p to unlock the password of this account.
Petesh解决方案是正确的:

usermod -p '*' foo
从shadow的手册页:


“如果密码字段包含的字符串不是crypt(3)的有效结果,例如!或*,则用户将无法使用unix密码登录(但用户可以通过其他方式登录系统)。”

否,它告诉您帐户已锁定,而不是没有密码。您锁定和禁用帐户以防止用户使用该帐户登录;甚至通过SSH。您通常只能使用
su
sudo
切换到锁定的帐户

手册页面中描述了这些规则,其中说明:

例如,如果密码字段包含的字符串不是crypt(3)的有效结果!或者*,用户将无法使用unix密码登录(但用户可以通过其他方式登录系统)

逻辑是,
*
永远不会匹配密码,但并不意味着锁定,而
表示锁定

此加密密码通常存储在卷影文件中,可以使用passwd命令或
usermod
命令更改。如果希望将密码更改为不起作用的密码,则可以更改为以
*
开头的密码,该密码永远不会与密码匹配,因此,例如,使用
usermod
命令:

bubble ~ [2]> sudo usermod -L freerad
bubble ~> sudo grep freerad /etc/shadow
freerad:!*:16197:0:99999:7:::
这是一个已锁定的freerad帐户。ssh应该阻止您使用该帐户登录,即使您使用公钥/私钥对

bubble ~> sudo usermod -p '*' freerad
bubble ~> sudo grep freerad /etc/shadow
freerad:*:16291:0:99999:7:::
此freerad帐户有一个永远不匹配的密码。帐户未锁定,但如果您使用ssh公钥/私钥登录,则不会阻止您登录。

请尝试使用解锁

passwd -u foo

被锁定和没有密码是两码事。

passwd:解锁密码将导致无密码帐户。您应该使用usermod-p设置密码以解锁此帐户的密码。