Linux

SSH Kerberos 身份驗證失敗,在 debian 擠壓上出現“請求中的主體錯誤/沒有客戶端憑據”

  • January 2, 2014

我有一個 debian 擠壓主機,在沒有密碼提示的情況下我無法使用 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 很好。已經嘗試重新創建主體/密鑰。因此,那裡發布的解決方案都沒有幫助。

有什麼提示嗎?

在範例輸出中,我看到您有一個密鑰,即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. 檢查來自客戶端的正向/反向名稱查找。IE
$ 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”版本都應該匹配。

引用自:https://serverfault.com/questions/478867