我需要让用户使用不同的身份验证方法登录 CentOS 系统。一些用户使用密码,另一些用户使用公钥。
我遵循了这里提到的方法: 如何设置 OpenSSH 每个用户的身份验证方法?
但是,我无法成功进行基于密码的登录。
在 sshd_config 文件中,我有:
AuthenticationMethods keyboard-interactive,publickey
PasswordAuthentication no
Match User newton
PasswordAuthentication yes
Match all
更新:我发现只有当我使用 Google 身份验证启用 2FA 时才会出现此问题,并且出现以下行:
AuthenticationMethods keyboard-interactive,publickey
虽然对于用户 newton,我已经设置了密码验证,但我看到以下错误:
[root@localhost]# ssh [email protected]
Permission denied (publickey).
任何建议都值得赞赏。
答案1
尽管@Tolsadus 的回答可能指出了正确的解决方案,但它并没有清楚地回答问题。
简而言之,的手册页ssh_config
是了解 ssh 中的配置解析器如何工作的一个很好的开始(相同的规则适用于sshd_config
):
对于每个参数,将使用第一个获得的值
这意味着您的示例将为所有用户设置为,而为PasswordAuthentication
用户将不会覆盖它(因为它已经设置)。要解决这个问题,您应该在块中设置默认值。这将对用户产生预期的效果:no
newton
Match
newton
Match User newton
PasswordAuthentication yes
Match all
PasswordAuthentication no
答案2
完美解释如何使用匹配选项/etc/ssh/sshd_config
就你的情况而言,你应该像那个“真实”世界的例子那样做 https://gist.github.com/kjellski/5940875
您不仅可以找到匹配的地址,还可以找到评论的用户。
编辑/更新
@Jakuje 正确地回答了这个问题,比我的更精确。