如何解锁帐户进行公钥ssh授权,但不进行密码授权?

如何解锁帐户进行公钥ssh授权,但不进行密码授权?

ssh 不允许我登录,因为帐户被锁定。我想解锁服务器上的用户以通过 ssh 进行公钥授权,但不启用密码登录。

我试过了:

# passwd -u username
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.

验证日志条目:

Mar 28 00:00:00 vm11111 sshd[11111]: User username not allowed because account is locked
Mar 28 00:00:00 vm11111 sshd[11111]: input_userauth_request: invalid user username [preauth]

答案1

无论你做什么,都不要让帐户处于 的状态passwd -u,并且密码字段为空:这允许无需输入密码即可登录(SSH 除外,因为 SSH 拒绝这样做)。

将帐户更改为无密码,但已解锁。如果密码数据库中的密码散列不是任何字符串的散列,则帐户没有密码。传统上,使用单字符字符串(例如*或 )来实现这一目的。!

锁定帐户还在密码字段中使用特殊标记,导致该字符串不是任何字符串的哈希值。该标记取决于系统。在 Linux 上,该passwd命令通过在开头添加 来标记锁定的密码!,如果该字段以 开头,OpenSSH 会将帐户视为锁定!。其他 Unix 变体往往使用类似但不相同的机制,因此如果您的密码数据库在异构网络之间共享,请务必小心。

在 Linux 上,您可以禁用基于密码的帐户访问,同时允许 SSH 访问(使用其他一些身份验证方法,通常是密钥对):

usermod -p '*' username

用户将无法将帐户更改回密码,因为这需要他们输入有效的密码。

如果需要,您可以将 SSH 配置为拒绝密码身份验证,无论帐户是否有密码。您仍然需要安排 SSH 不考虑帐户被锁定,因此例如在 Linux 上,您需要!从密码字段中删除(但不要将该字段设置为空 - 将其设置*为如上所述) )。要禁用 SSH 的密码身份验证,请PasswordAuthentication/etc/sshd_config或添加指令/etc/ssh/sshd_config(无论它位于您的系统上)。使用Match块使该指令仅适用于特定用户;Match块必须出现


Match User username
    PasswordAuthentication no

答案2

按照 @Skaperen 的建议,解锁帐户并为用户提供一个复杂的密码。

编辑/etc/ssh/sshd_config并确保您拥有:

PasswordAuthentication no

检查该行是否没有注释(#在开始处)并保存文件。最后,重新启动sshd服务。

执行此操作之前,请先确保您的公钥身份验证正常运行。

如果您只需要为一个(或一小部分)用户执行此操作,请保持PasswordAuthentication启用状态并改为使用Match User

Match User miro, alice, bob
    PasswordAuthentication no

放置在文件底部,因为它在下一个Match命令或 EOF 之前有效。

您还可以使用Match Group <group name>or 否定Match User !bloggs

正如您在评论中提到的,您还可以反转它,以便在配置的主要部分中禁用密码身份验证,并使用Match语句为一些用户启用它:

PasswordAuthentication no
.
.
.
Match <lame user>
    PasswordAuthentication yes

答案3

您不需要启用或设置密码,如果您已经在使用强密钥,那么您确实不应该启用或设置密码。只需从现有会话中重新锁定您的帐户(sudo passwd -l 用户名)并修复您的 SSH 配置即可。

发生这种情况的原因可能是因为您编辑了默认 SSH 守护程序设置之一(在 /etc/ssh/sshd_config 中)。

在 /etc/ssh/sshd_config 中更改此设置并重新启动 SSH:

UsePAM yes

在 SSH 中启用 PAM 将允许您即使在删除密码的情况下仍然可以登录。无论您做什么,都不要设置空密码或类似密码;锁定密码字段并不一定意味着锁定您的整个帐户。

配置 SSH 守护进程时的快速提示:每当更改 SSH 配置时,保持另一个会话打开(在另一个窗口中),然后测试您是否仍然可以登录;如果您无意中破坏了访问权限,请使用之前的会话来修复它。

(免责声明:我在 Userify 工作。)

答案4

我在 CentOS 7 上遇到了这个问题。我是一个普通的基于 Debian 的 Linux 用户,所以我就像一条离水的鱼。我注意到在某些服务器中它可以工作,而只有一台服务器则不能。 audit.log 没有说任何有用的信息,secure.log 也没有提供任何信息。我发现唯一真正的区别是有效和无效的文件和目录之间的一些安全上下文差异。获得安全保障

sudo ls -laZ <user-home>/.ssh

目录的(我假设 sshd_config 有很多默认值)。

您应该看到一些ssh_home_tuser_home_t属性。如果不这样做,请使用该chcon命令添加缺少的属性。

例如

home="$(getent passwd <user> | cut -d: -f6)"
sudo chcon -R unconfined_u:object_r:ssh_home_t:s0 "$home".ssh
sudo chcon unconfined_u:object_r:user_home_t:s0 "$home"

就我而言,我怀疑用户是以非标准方式创建的。他的家是一个目录/var/lib

更多信息:https://www.linuxquestions.org/questions/linux-security-4/selinux-preventing-ssh-login-with-~-ssh-authorized_keys-4175469538/

相关内容