使用 Kerberos 进行 SSH 单点登录

使用 Kerberos 进行 SSH 单点登录

我想通过 Kerberos SSO 使用 SSH 进行身份验证。现在,当我使用我的用户主体登录时,sourcehost我获得了我的 Kerberos 票证,但无法使用它通过 SSH 进入targethost

问题似乎出在主机名上。我有一个主机主体,但无论我是否将其转换为不存在的主机主体(请参阅下面的错误消息)。host/[email protected]ssh targethostssh targethost.example.comhost/[email protected]

我可能错了,但我认为应该反过来,并且都ssh targethost应该ssh targethost.example.com转化为 host principal 。host/[email protected]

错误如下:

$ ssh targethost.example.com -v
...
debug1: Unspecified GSS failure.  Minor code may provide more information
Server host/[email protected] not found in Kerberos database

debug1: Unspecified GSS failure.  Minor code may provide more information
Server host/[email protected] not found in Kerberos database

debug1: Unspecified GSS failure.  Minor code may provide more information
...
debug1: Next authentication method: password
[email protected]'s password: 

有人能解释一下主机主体是如何从主机名派生出来的以及如何配置它吗(顺便说一下,我在 Ubuntu 上)?


编辑:

gravity 的回答让我找到了一个我认为很适合我的配置的解决方案。

  • 我在 Garman 的《Kerberos》一书中发现KDC 端规范化是首选方式。
  • 对于我的 LDAP 支持的 KDC,我在 Kerberos 文档中找到了(在这一页)如何实现这一目标。

kdadmin.local因此,在使用/ addprincFQDN创建主机主体后,我必须通过运行ldapmodify以下输入为 LDAP 中的新主体条目添加别名:

dn: krbPrincipalName=host/[email protected],cn=EXAMPLE.COM,cn=krbContainer,dc=example,dc=com
replace: krbCanonicalName
krbCanonicalName: host/[email protected]
-
add: krbPrincipalName
krbPrincipalName: host/[email protected]

答案1

传统上,Kerberos 使用反向 DNS 来规范化主体名称。也就是说,在解析targethost.example.com为 IP 地址后,它会尝试将该地址解析回“规范”名称,并将其用作主体。

如果你targethost通过 /etc/hosts 解析,那么第一的相应行中的名称将用作“规范”名称:

# good:
1.2.3.4  targethost.example.com  targethost

# bad:
1.2.3.4  targethost  targethost.example.com

如果您愿意,您可以通过 /etc/krb5.conf 完全关闭基于 DNS 的规范化:

[libdefaults]
    dns_canonicalize_hostname = false

...只需为主机创建两个主体 - 一个用于短名称,一个用于长名称。(这实际上是 Active Directory 所做的,它与 SSL/TLS 的行为方式没有什么不同 - 直接使用用户输入总是比询问 DNS 更安全。)

相关内容