和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 机制或者凯尔伯罗斯。
从客户角度来看,另一个区别是本地化。密码身份验证,客户端可以本地化“密码”标签,因为他们知道服务器正在要求输入密码。使用键盘交互身份验证,即使服务器仅要求输入一个密码,客户端也无法本地化提示(除非他们使用人工智能),因为它是一个通用提示。