如何列出所有 OpenSSH 支持的身份验证方法?

use*_*042 5 ssh

我正在运行带有 OpenSSH 版本 6.7 的 Debian Linux jessie。我在 中使用该AuthenticationMethods指令/etc/ssh/sshd_config。我知道这些字符串被识别AuthenticationMethods

keyboard-interactive
gssapi-with-mic
password
publickey
Run Code Online (Sandbox Code Playgroud)

在哪里可以找到可与 一起使用的所有有效字符串的列表AuthenticationMethods?(这样的列表不在 的手册页中sshd_config。)

Joh*_*ene 6

没有办法通过网络 \xe2\x80\xa6 提前列出 OpenSSH 的所有活动身份验证方法 \xe2\x80\xa6 :您面临的挑战仅是第一个然后是下一个 \xe2\x80\xa6

\n

这是一项安全功能。你要知道?看着那(这/etc/ssh/sshd_config。哦,你可以\xe2\x80\x99t吗?\xe2\x80\x99 的安全设计。

\n

因此,我将比官方 OpenSSL 文档所涵盖的内容进一步扩展该列表,因为我已经对 OpenSSH 进行了代码审查一段时间了。

\n

可用的身份验证方法有:

\n
    \n
  • gssapi-with-mic “,
  • \n
  • hostbased “,
  • \n
  • keyboard-interactive “,
  • \n
  • none”(用于在以下情况下访问无密码帐户:PermitEmptyPassword ”(启用
  • \n
  • password “ 和
  • \n
  • publickey “。
  • \n
\n

AuthenticationMethods指定必须成功完成才能授予用户访问权限的身份验证方法。此选项后面必须跟一个或多个以逗号分隔的身份验证方法名称列表,或者单个字符串any以指示接受任何单一身份验证方法的默认行为。如果覆盖默认值,则成功的身份验证需要完成至少其中一个列表中的每一种方法。

\n

公钥认证

\n

例如,

\n
AuthenticationMethods publickey,password publickey,keyboard-interactive\n
Run Code Online (Sandbox Code Playgroud)\n

将要求用户完成公钥身份验证,然后是密码或键盘交互身份验证。每个阶段仅提供一个或多个列表中的下一个方法,因此对于此示例,不可能尝试passwordkeyboard-interactive在公钥之前

\n

键盘交互认证

\n

对于键盘交互式身份验证,\n还可以通过附加冒号后跟设备\n标识符来将身份验证限制到特定\n设备\nbsdauthpam根据服务器\n配置来限制对特定\n设备的身份验证。例如,

\n
AuthenticationMethods keyboard-interactive:bsdauth\n
Run Code Online (Sandbox Code Playgroud)\n

将键盘交互身份验证限制为bsdauth设备的键盘交互身份验证。

\n

多重公钥认证

\n

如果多次列出 publickey 方法,sshd(8)请验证已成功使用的密钥是否不会重复用于后续身份验证。

\n

例如,

\n
AuthenticationMethods publickey,publickey\n
Run Code Online (Sandbox Code Playgroud)\n

需要使用两个不同的公钥成功进行身份验证。

\n

笔记

\n

一个逗号(,对身份验证选项的逗号 ( ) 分隔符首先在其任何空格分隔符之前一起尝试(AND 逻辑)。

\n

单独 尝试分隔一个或多个身份验证选项(其选项可以用逗号连接)的空格 ( ) 分隔符(或逻辑)。

\n

注意:冒号 ( :) 分隔符用于将其附带的身份验证方法限制为特定的身份验证设备路径机制,例如pambsdauthskey。对于键盘交互式身份验证,还可以通过附加冒号后跟设备标识符bsdauthpam或 来将身份验证限制为特定设备skey,具体取决于服务器配置。例如,keyboard-interactive:bsdauth将限制键盘\n对bsdauth设备的交互式身份验证。

\n

请注意,none中列出的每个身份验证选项(除 )AuthenticationMethods还应在配置中显式启用其相应的配置设置。例如,如果pubkey在设置中使用了选项AuthenticationMethods,那么它\xe2\x80\x99s伴随的配置行PubkeyAuthentication on也必须在其配置文件中。

\n

OpenSSH 代码审查者的详细信息

\n
    \n
  • 通道类型:preauth(预通道)
  • \n
  • CLI 选项:-oAuthenticationMethods=XXXX"
  • \n
  • 进程上下文:主进程
  • \n
  • SSH 服务:ssh-userauth (SSH2_MSG_USERAUTH_REQUEST)
  • \n
  • options.auth_methods[]/auth2_setup_methods_lists()/input_userauth_request()
  • \n
  • AuthenticationMethods 默认为“ any”。
  • \n
\n


小智 3

这没有非常清楚地记录(或根本没有记录)。但这是我能找到的。在OpenSSH 6.2中,只有4种方法

只有四种允许的方法:公钥、密码、基于主机和键盘交互。

其他人也认为需要更多文档。请参阅附件 3045,其中说明了 OpenSSH 7.5:

可用的身份验证方法有:gssapi-with-mic、基于主机、键盘交互、无(用于在启用 PermitEmptyPassword 时访问无密码帐户)、密码和公钥。

希望有帮助。