SSH Kerberos 身份驗證失敗,在 debian 擠壓上出現“請求中的主體錯誤/沒有客戶端憑據”
我有一個 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 可能是個好主意。
更新:
客戶端目前正在獲取短名稱的密鑰,但伺服器認為它使用長名稱正確命名。問題很可能就在那裡。為了確定,請嘗試以下操作:
- 檢查來自客戶端的正向/反向名稱查找。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”版本都應該匹配。