ssh -o PreferredAuthentications:“密码”和“键盘交互”之间有什么区别?

ssh -o PreferredAuthentications:“密码”和“键盘交互”之间有什么区别?

PreferredAuthentications=password都会PreferredAuthentications=keyboard-interactive提示输入密码,那么它们之间有什么区别?

我使用关键词进行 Google 搜索ssh PreferredAuthentications 密码 键盘交互 区别但没有找到答案。

我注意到的唯一区别是提示字符串(user@host's password:Password:):

$ ssh -o PreferredAuthentications=password,keyboard-interactive my-host
root@my-host's password:
Password:
Permission denied (gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive).

更新(2018-04-09):

为了方便参考,以下内容来自SSH:TDG 书籍如上所述jouell 的回答

"keyboard-interactive"用户身份验证主要用于PAM服务器端的身份验证。它提供了多重质询-响应对话与用户交互,服务器向用户发送文本查询,用户输入响应,这个过程可以重复多次。例如,你可以PAM为 SSH 配置一个模块,该模块使用RSA 安全令牌一次性密码方案。人们对此感到困惑,因为默认情况下,"keyboard-interactive"身份验证通常只在单个质询-响应周期中实现密码身份验证,这只会提示输入密码,因此看起来与身份验证完全相同"password"。如果您不是故意将两者用于不同的目的,您可能需要禁用其中一个以避免最终用户混淆。

答案1

SSH 协议有多种身份验证方法。密码键盘交互就是其中两个。

密码身份验证只会要求输入一个密码。服务器不会发送任何特定提示。因此,客户端可以选择如何标记提示(“用户@主机的密码”提示来自 OpenSSH客户,例如ssh,,sftp等等)。

键盘交互身份验证是一个更复杂的请求,需要任意数量的信息。对于每条信息,服务器发送提示的标签。此外,它还允许服务器提供整个“表单”的详细描述。服务器还可以指定哪些输入是秘密的(当用户输入时需要进行模糊处理)以及哪些不是。

后者通常仅用于请求单个“秘密”密码提示,因此您经常会发现密码用户端的身份验证。

从协议角度来看,这就是区别。


从实现角度来看,使用 OpenSSH 服务器,键盘交互认证可以与双因素(或多因素)身份验证挂钩,例如由通用 PAM 机制或者凯尔伯罗斯

从客户角度来看,另一个区别是本地化。密码身份验证,客户端可以本地化“密码”标签,因为他们知道服务器正在要求输入密码。使用键盘交互身份验证,即使服务器仅要求输入一个密码,客户端也无法本地化提示(除非他们使用人工智能),因为它是一个通用提示。

答案2

您已经知道“密码”是什么。从非常高的层次(不是砖块级协议)来看,将“键盘交互”视为使用 Radius 和/或 SecurID 等进行 2FA 的方法。它提供质询和响应对话框:ssh.com有一个很好的简短描述。它进一步强调了键盘交互是密码所属的范畴。恕我直言,这有点令人困惑。

另请参阅蜗牛书定义。我们经常将其用于受 RSA 保护的盒子。

相关内容