![使用 Kerberos 进行 SSH 单点登录](https://linux22.com/image/1518311/%E4%BD%BF%E7%94%A8%20Kerberos%20%E8%BF%9B%E8%A1%8C%20SSH%20%E5%8D%95%E7%82%B9%E7%99%BB%E5%BD%95.png)
我想通过 Kerberos SSO 使用 SSH 进行身份验证。现在,当我使用我的用户主体登录时,sourcehost
我获得了我的 Kerberos 票证,但无法使用它通过 SSH 进入targethost
。
问题似乎出在主机名上。我有一个主机主体,但无论我是否将其转换为不存在的主机主体(请参阅下面的错误消息)。host/[email protected]
ssh targethost
ssh targethost.example.com
host/[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
因此,在使用/ addprinc
FQDN创建主机主体后,我必须通过运行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 更安全。)