通过 ssh 进行一次性密码登录

通过 ssh 进行一次性密码登录

添加 SSH 密钥

我有一台运行 CentOS 7 的服务器。我有许多客户端,包括 Fedora、Ubuntu、CentOS 和 Windows 10(如果这很重要的话)。登录服务器的唯一方法是使用 ssh 密钥在终端上通过 ssh 登录。无需密码

我想要做的是能够以超级用户的身份允许通过密码进行一次性登录,以添加 ssh 密钥来自不同的机器,因为这样可以使事情变得更容易。

当客户端登录后,除非获得允许,否则不应该再次使用密码登录。

这是我的档案内容/etc/ssh/sshd_config及相关信息

UsePAM yes
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no

有什么办法可以做到这一点?

提前致谢

答案1

在给定场景中,唯一需要使用密码登录的情况是将基于密钥的登录功能引导到新主机上的第一个用户帐户时。

由于服务器仅使用用户的民众密钥来验证他们的身份,作为系统管理员,您只需~/.ssh/authorized_keys在创建他们的帐户时向他们索要该密钥并将其添加到他们的帐户中即可。在这种情况下,无论您是手动执行此操作、使用 shell 脚本还是使用 Ansible 等编排工具,都没有关系。
当然,他们的私钥永远不应该离开他们的计算机。

答案2

首先我想说的是,我是以学术的角度来回答这个问题的。我不认为这是一个好主意。

首先向系统添加一个用户组;例如keys-only

然后,您的sshd_config设置PasswordAuthentication no仅适用于该组的成员。

Match Group keys-only
    PasswordAuthentication no

是的,所有其他用户都可以使用密码。因为...

当用户首次通过 SSH 登录时,应将其添加到组中keys-only,以便后续登录时他们将遵守上述匹配规则。您可以使用脚本/etc/profile.d和适当的 sudo 策略来实现这一点。

# Add users to the keys-only group if they are not already members.
if ! lid -gn keys-only >/dev/null | grep -q $USER; then
  sudo usermod -aG keys-only $USER
fi

这实际上只是让您思考的粗略步骤,并非旨在完成。您需要考虑用户未成功添加到keys-only组等情况。(仍然允许后续密码登录。)

答案3

这可能不是一个非常安全的想法。不过,我认为你应该能够通过 SSHLog 做到这一点:

https://github.com/sshlog/agent/

它是一个开源守护进程,用于监视 SSH 的登录尝试。当用户登录时,可以将其配置为执行脚本。例如:

https://github.com/sshlog/agent/tree/master/daemon/config_samples

通过这种方式,你的脚本可以检查一些标志(例如,他们的主目录或组成员中的文件)并扰乱他们的密码或将它们添加到@aaron-copely 的答案中的组中

您还可以触发 Slack 警报或类似功能,以便在发生此活动(即密码登录)时收到通知。

相关内容