没有设置密码的用户可以用ssh登录吗?

没有设置密码的用户可以用ssh登录吗?

首先,我想澄清一下,我并不是询问在没有提示的情况下仅使用公钥身份验证。我有一个用例,必须仅允许用户通过 SSH 公钥身份验证进行访问。我希望该用户禁用在串行终端上通过密码登录的功能。我正在构建自己的 Linux 内核,因此使用包含authorized_keys 文件的主目录创建用户。在 /etc/shadow 中,用户有一个没有密码的条目:<username>:!:...

我的 sshd_config 包含PasswordAuthentication noPermitEmptyPasswords yes但即使如此,用户仍然被拒绝使用与该用户的 ~/.ssh/authorized_keys 文件匹配的正确私钥身份文件。UsePAM no此版本的 SSH 服务器不支持(至少报告是这样的)。用户文件/文件夹服务器端的所有所有权和权限均已验证。

在查看了我认为的 openSSH 服务器 (sshd) 代码后,它会检查 /etc/shadow 密码文件中是否有锁定的帐户:

https://github.com/openssh/openssh-portable/blob/V_7_4_P1/auth.c#L141

这让我相信尝试这种方式是愚蠢的,我应该设置密码并以另一种方式禁用串行登录。

这很直观,但我想确认内核(和 openssh)被设计为不允许用户登录,除非已设置密码。有这方面的官方文件或文字吗?提前致谢。

答案1

可以配置任一行为。

如果密码字段/etc/shadow以感叹号开头,则帐户被锁定。该帐户无法使用 SSH 登录,并且通常除 root 之外的任何访问该帐户的尝试都会失败。

如果密码包含另一个无效密码(通常,在 Linux 上为单个星号),则该帐户没有密码(因为星号不是任何加密密码的有效编码),但可以通过 SSH 公钥身份验证或其他方式访问非密码手段。

如果您使用 Debian 或 Ubuntu,则可以使用adduser --disabled-login和配置这些行为adduser --disabled-password

内核不参与此过程;该决定由 PAM 和 sshd 做出。

答案2

将客户端的公钥附加到$HOME/.ssh/authorized_keys文件中。这将禁用任何类型的密码提示。如果他们的私钥受密码保护,请让他们使用ssh-agent.

相关内容