在 Debian squeeze 上,SSH Kerberos 身份验证失败,并显示“请求中的主体错误/没有客户端凭据”

在 Debian squeeze 上,SSH Kerberos 身份验证失败,并显示“请求中的主体错误/没有客户端凭据”

我有一台 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 可能是一个好主意。

更新:

客户端目前正在获取短名称的密钥,但服务器认为长名称的命名是正确的。很可能是问题所在。为确保万无一失,请尝试以下操作:

  1. 检查来自客户端的正向/反向名称查找。即

    $ getent hosts debian-squeeze | awk '{print $1; exit}' | xargs getent hosts | awk '{print $2}'
    

    返回的名称是客户端将尝试获取票证的名称。根据您的输出判断,这可能是简称。

  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
    ...
    

    在列表中,您应该会看到一个与上一个命令中的主机名匹配的主体。如果它不在那里,那就是您的问题。如果它在那里...

  3. 验证 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 中的所有非本地主机条目?

相关内容