我有一台 debian squeeze 主机,如果没有密码提示,我无法使用 kerberos 登录。配置相同的 ubuntu 12.04 主机运行正常,无需输入密码即可登录。
在 kinit 之后,klist 给出:
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: boti@REALM
Valid starting Expires Service principal
14/02/2013 16:37 15/02/2013 16:37 krbtgt/REALM@REALM
现在,当我尝试通过 ssh 登录 debian-squeeze 时,系统会提示我输入密码。如果我此时检查我的票证而不进行身份验证,我会得到:
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: boti@REALM
Valid starting Expires Service principal
14/02/2013 16:37 15/02/2013 16:37 krbtgt/REALM@REALM
14/02/2013 16:38 15/02/2013 16:37 host/debian-squeeze@
14/02/2013 16:38 15/02/2013 16:37 host/debian-squeeze@REALM
显然我获得了一张票。然而 ssh 调试日志显示:
Postponed gssapi-with-mic for boti from 192.168.255.98 port 59557 ssh2
debug3: mm_request_send entering: type 40
debug3: mm_request_receive_expect entering: type 41
debug3: mm_request_receive entering
debug3: monitor_read: checking request 40
debug1: Unspecified GSS failure. Minor code may provide more information
Wrong principal in request
我的 DNS 没问题。已经尝试重新创建主体/密钥。因此,发布在那里的解决方案均无济于事。
有什么提示吗?
答案1
在示例输出中,我看到您获得了一个密钥debian-squeeze
——主机名中没有任何点。这确实证明您已将反向解析设置为指向短名称。您看到的真的是非 FQDN 名称吗?还是针对此问题进行了编辑?
Kerberos 应该可以与其中任何一个一起使用,但您可能需要仔细检查主机本身是否认为它被称为debian-squeeze
。检查内部的正向 -> 反向查找是否debian-squeeze
真正解析为debian-squeeze
:
$ getent hosts $(hostname) | awk '{print $1; exit}' | xargs getent hosts | awk '{print $2}'
我还没有真正听说过使用短名称部署 Kerberos,因此如果您可以选择,坚持使用 FQDN 可能是一个好主意。
更新:
客户端目前正在获取短名称的密钥,但服务器认为长名称的命名是正确的。很可能是问题所在。为确保万无一失,请尝试以下操作:
检查来自客户端的正向/反向名称查找。即
$ getent hosts debian-squeeze | awk '{print $1; exit}' | xargs getent hosts | awk '{print $2}'
返回的名称是客户端将尝试获取票证的名称。根据您的输出判断,这可能是简称。
检查服务器上存在哪些密钥。
$ sudo klist -k /etc/krb5.keytab Keytab name: WRFILE:/etc/krb5.keytab KVNO Principal ---- -------------------------------------------------------------------------- 1 host/debian-squeeze.realm@REALM 1 host/debian-squeeze.realm@REALM 1 host/debian-squeeze.realm@REALM 1 host/debian-squeeze.realm@REALM ...
在列表中,您应该会看到一个与上一个命令中的主机名匹配的主体。如果它不在那里,那就是您的问题。如果它在那里...
验证 kerberos 服务器上的密钥版本是否与 上的密钥版本相同
debian-squeeze
。在客户端上,明确获取密钥并验证行末的“KVNO”版本:$ kvno host/debian-squeeze.realm host/debian-squeeze.realm@REALM: kvno = 1
无论如何,所有这些命令中的主机名和“kvno”版本都应该匹配。
答案2
当服务器上的 /etc/hosts 包含的 IP 地址条目与 DNS 或 keytab 中的条目不匹配时,我曾看到此错误。您是否仔细检查(或删除)了 /etc/hosts 中的所有非本地主机条目?