Putty Kerberos/GSSAPI 身份验证

Putty Kerberos/GSSAPI 身份验证

我配置了一些 Linux 服务器,使用 RHEL6 上的 sssd 进行 Active Directory Kerberos 身份验证。我还启用了 GSSAPI 身份验证,希望实现无密码登录。

但我似乎无法让 Putty (0.63) 在没有密码的情况下进行身份验证。

GSSAPI 在配置了 AD 身份验证的 Linux 系统(openSSH 客户端)之间工作,使用 .ssh/config 设置来启用 GSSAPI。

它也可以从 Cygwin(openSSH 客户端)运行,使用相同的 .ssh/config 设置以及运行 kinit 命令来获取票证。

此外,Samba 在所有 Linux 系统上共享,包括主目录,都可以从 Windows 资源管理器运行,而无需密码(我不确定 GSSAPI 是否在那里发挥作用)

我可以尝试哪些方法来排除此故障?我的大多数用户都使用 Putty。另外,我不是 Windows 管理员,因此我无法在域控制器上执行任何操作。我的帐户仅具有将服务器添加到 AD 域的权限。


我打开了 putty SSH 数据包日志记录。我发现这有点意思,但我不知道该如何处理这些信息:

Event Log: Server version: SSH-2.0-OpenSSH_5.3
Event Log: Using SSH protocol version 2
Event Log: We claim version: SSH-2.0-PuTTY_Release_0.63
Outgoing packet #0x0, type 20 / 0x14 (SSH2_MSG_KEXINIT)
Incoming packet #0x0, type 20 / 0x14 (SSH2_MSG_KEXINIT)
Event Log: Doing Diffie-Hellman group exchange
Outgoing packet #0x1, type 30 / 0x1e (SSH2_MSG_KEX_DH_GEX_REQUEST)
Incoming packet #0x1, type 31 / 0x1f (SSH2_MSG_KEX_DH_GEX_GROUP)
Event Log: Doing Diffie-Hellman key exchange with hash SHA-256
Outgoing packet #0x2, type 32 / 0x20 (SSH2_MSG_KEX_DH_GEX_INIT)
Incoming packet #0x2, type 33 / 0x21 (SSH2_MSG_KEX_DH_GEX_REPLY)
Outgoing packet #0x3, type 21 / 0x15 (SSH2_MSG_NEWKEYS)
Event Log: Initialised AES-256 SDCTR client->server encryption
Event Log: Initialised HMAC-SHA1 client->server MAC algorithm
Outgoing raw data at 2014-11-25 00:21:08
Incoming packet #0x3, type 21 / 0x15 (SSH2_MSG_NEWKEYS)
Event Log: Initialised AES-256 SDCTR server->client encryption
Event Log: Initialised HMAC-SHA1 server->client MAC algorithm
Outgoing packet #0x4, type 5 / 0x05 (SSH2_MSG_SERVICE_REQUEST)
Incoming packet #0x6, type 51 / 0x33 (SSH2_MSG_USERAUTH_FAILURE)
...%gssapi-keyex
,gssapi-with-mic
,password.
Event Log: Using SSPI from SECUR32.DLL
Event Log: Attempting GSSAPI authentication
Outgoing packet #0x6, type 50 / 0x32 (SSH2_MSG_USERAUTH_REQUEST)
Incoming packet #0x7, type 60 / 0x3c (SSH2_MSG_USERAUTH_GSSAPI_RESPONSE)
Event Log: GSSAPI authentication initialised
Outgoing packet #0x7, type 61 / 0x3d (SSH2_MSG_USERAUTH_GSSAPI_TOKEN)
Incoming packet #0x8, type 61 / 0x3d (SSH2_MSG_USERAUTH_GSSAPI_TOKEN)
Event Log: GSSAPI authentication initialised
Event Log: GSSAPI authentication loop finished OK
Outgoing packet #0x8, type 66 / 0x42 (SSH2_MSG_USERAUTH_GSSAPI_MIC)
Incoming packet #0x9, type 51 / 0x33 (SSH2_MSG_USERAUTH_FAILURE)
...%gssapi-keyex
,gssapi-with-mic
,password.

答案1

在属于 Active Directory 域的 Windows 计算机上,用户在登录 Windows 时会收到 Kerberos 票证授予票证,如果在 PuTTY 配置连接|SSH|Auth|GSSAPI 中启用了 GSSAPI 身份验证,则 PuTTY 能够使用该票证进行身份验证(并且在 GSSAPI 之前尝试的其他身份验证方法,例如通过 Pageant 的公钥,未在连接|SSH|Auth 中设置或禁用)。

[如果您还需要票证委派(例如,登录后在服务器上挂载 Kerberos 文件系统),请确保在 PuTTY 中也启用了 GSSAPI 委派,您登录的服务器在 Active Directory 中的委派选项卡中被标记为“信任这台计算机以委派任何服务(仅限 Kerberos)“,但默认情况下它们不是。奇怪的是,AD 中的后一种信任设置仅适用于从 Windows 客户端(如 PuTTY)进行委派工作;Linux“ssh -K”客户端则不需要它。

在不属于 Active Directory 域的自我管理(个人)Windows 计算机上,您仍然可以通过 PuTTY 使用 Kerberos/GSSAPI 身份验证(和票证委托),但您必须自己获取票证。不幸的是,Windows 7 没有安装任何与 kinit 程序等效的程序(供您手动请求票证),如果您没有票证,PuTTY 也不会提示您输入 Kerberos 密码。因此,您必须安装MIT Kerberos 适用于 Windows软件包,其中包括常用的 kinit/klist/kdestroy 命令行工具,以及简洁的 GUI 工具“MIT Kerberos 票证管理器”。使用这些工具获取票证,然后 PuTTY 将自动使用 MIT GSSAPI 库而不是 Microsoft SSPI 库,一切都应该可以正常工作。如果“MIT Kerberos 票证管理器”正在运行,当 PuTTY 需要票证时,它会自动提示您输入 Kerberos 密码,因此最好从启动文件夹链接它。

更新:从 Windows 10 版本 21H1 和 Windows Server 2022 开始,Windows 版 OpenSSH(版本 8.1 或更新版本)Windows 内置的客户端和服务器现在也支持 GSSAPI 身份验证和委派(即ssh -K)。因此,如果您只需要这些,那么从 2021 年起,您不再需要安装 PuTTY 和 MIT Kerberos。

答案2

首先仔细检查运行 PuTTY 的 Windows 机器上的 klist 输出是否显示有效的 TGT。然后在 PuTTY 会话的配置中,确保尝试 GSSAPI 身份验证在 中启用Connection - SSH - Auth - GSSAPI。最后,确保它已配置为在 中自动使用您的用户名登录Connection - Data。您可以明确指定用户名,也可以选择单选按钮使用系统用户名

从历史上看,这就是我通过 Kerberos 实现无密码 SSH 登录所需要做的全部工作。

答案3

问题出在 Windows Kerberos 设置上。我认为我们的 Active Directory 设置有问题,我不太清楚,因为我不是 Windows 管理员。

但是我通过使用 Windows 7 CLI 中的 ksetup 手动配置 Kerberos 解决了该问题。

重新启动远程工作站后,我无法登录我的 PC。这是因为在原始配置中,我的领域域的 TLD 部分始终不存在(域\用户),但在我手动配置它之后,我必须更改我的登录域以反映完整的领域域名(域.TLD\用户),然后我就可以登录我的 Windows PC,尽管现在验证所需的时间似乎更长了。

在更改之前,ksetup 的输出仅显示我的默认领域,并且是小写的。

我使用“ nslookup -type=SRV _kerberos._tcp.domain.TLD ”来获取我的领域的所有 kdc 服务器。

我没有设置任何标志。

我设置了我的用户名“kset/mapuser[电子邮件保护]用户

我使用的资源: https://wiki.ncsa.illinois.edu/display/ITS/Windows+7+Kerberos+Login+using+External+Kerberos+KDC

https://www.cgl.ucsf.edu/Security/CGLAUTH/CGLAUTH.html

如果有人能向 Windows 管理员提供有关如何修复此问题(它坏了吗?)的任何建议,我会传达给他们。

相关内容