Kerberos

windows-ubuntu-bash + hypervisor winrm + ansible - 在 Kerberos 數據庫中找不到伺服器

  • April 15, 2018

我在這個問題上苦苦掙扎了一周,閱讀有關該問題的所有網際網路文章。

我們有什麼

  • 安裝了 Hyper-V 角色的 Windows Server 2016 數據中心 (netbios: hv)
  • Windows Server 2016 DataCenter 上的虛擬機(netbios:web、fs、dc)
  • 安裝了 Linux 子系統的 Windows 10 專業筆記型電腦(netbios:asuslin)
  • dc.goodpeople.local 上的域和所有伺服器和客戶端(包括 hv)都加入了 Active Directory 域
  • AD CA 與域控制器上的中間頒發 CA 一起安裝
  • 所有伺服器都獲得了帶有自動註冊策略的證書以驗證 kerberos

我想從我的帶有 kerberos 的 Windows 10 筆記型電腦上配置所有伺服器(包括 hv)。現在,我只需要對他們所有人進行一次成功的 win_ping 操作。

配置

  • winrm 在所有伺服器上配置:hv、web、fs、dc 和 clinet:asuslin 相同方式:打開 kerberos 身份驗證,具有有效證書的 https 偵聽器,防火牆埠 5986 已打開
  • 與所有 Windows 2016/win10 一樣 - powershell 是 .NET 至少 4.5 的最新版本
  • 客戶端上的 ansible 已根據文件安裝在 linux 子系統上,其中包含所有必要的庫,並且使用了 asuslin 客戶端的有效證書

實際錯誤

ansible hv -m win_ping -vvvv
ansible 2.5.0
 config file = /etc/ansible/ansible.cfg
 configured module search path = [u'/home/alexsuslin/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
 ansible python module location = /usr/lib/python2.7/dist-packages/ansible
 executable location = /usr/bin/ansible
 python version = 2.7.12 (default, Dec  4 2017, 14:50:18) [GCC 5.4.0 20160609]
Using /etc/ansible/ansible.cfg as config file
setting up inventory plugins
Parsed /etc/ansible/hosts inventory source with ini plugin
Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.7/dist-packages/ansible/plugins/callback/minimal.pyc
META: ran handlers
Using module file /usr/lib/python2.7/dist-packages/ansible/modules/windows/win_ping.ps1
<hv.goodpeople.local> ESTABLISH WINRM CONNECTION FOR USER: alexsuslin@GOODPEOPLE.LOCAL on PORT 5986 TO hv.goodpeople.local
checking if winrm_host hv.goodpeople.local is an IPv6 address
calling kinit with subprocess for principal alexsuslin@GOODPEOPLE.LOCAL
hv.goodpeople.local | UNREACHABLE! => {
   "changed": false,
   "msg": "kerberos: authGSSClientStep() failed: (('Unspecified GSS failure.  Minor code may provide more information', 851968), ('Server not found in Kerberos database', -1765328377))",
   "unreachable": true
}

什麼在起作用

  • 我成功地可以 win_ping 所有伺服器 fs、dc、web 和客戶端 asuslin
  • 我可以Enter-PSSession hv.goodpeople.local -UseSSL -Authentication Kerberos
  • 因為我可以 win_ping 其他伺服器,所以我假設我的 krb5.conf 配置正確以及 ansible 庫存文件。例如,如果我與組一起執行 win_ping,除 hv.goodpeople.local 之外的所有內容都可以

我已經檢查過的

  • 使用 kerberos 和 SSL 從 powershell 到 hv.goodpeople.local 的 winrm — OK

  • hv.goodpeople.local 的 SPN 與其他伺服器相比:dc、web、fs — 幾乎相同(實際上 hv 是 hyper-v 角色,還有一些額外的角色)

  • 我的帳戶憑據,嘗試使用域管理員

  • hv.goodpeople.local 上的 winrm SDDL — 看起來不錯

  • hv.goodpeople.local 和委派的 SPN — OK

  • linux子系統和hv.goodpeople.local之間SSL證書的不同類型的密碼—好的

  • kinit — 好的,24 小時票始終有效

  • kvno HTTP/hv.goodpeople.local@GOODPEOPLE.LOCAL –>HTTP/hv.goodpeople.local@GOODPEOPLE.LOCAL: kvno = 17

  • Google上關於該問題的每一頁(包括$$ serverfault.com $$)

    • dns 正在為每台機器解析,包括 hv
    • 使用 UPPERCASE 和 FQDN 以及 ansible 庫存正確配置 krb5.conf 領域

我最兄弟的是為什麼相同的配置不能在單個伺服器上執行而在其他伺服器上執行?我已經使用 powershell 應用了配置,以確保一切都是一樣的。如果有人可以指出我應該檢查更多嗎?

我做的真是太傻了

在 Windows(主機)機器上,C:\WINDOWS\System32\Drivers\etc\hosts 文件中有一個條目

192.168.88.20 srv-gp

那是我的高壓伺服器…我已經刪除了它,一切正常…

PS 我找到了https://github.com/bgamble/pykerberos/blob/master/test.py腳本來測試我的 kerberos 身份驗證和錯誤

sudo ./test.py -s HTTPS@hv.goodpeople.local -r GOODPEOPLE.LOCAL -p 5986 gssapi

我發現與 gp-srv 的奇怪連接…立即檢查 /etc/host 和 windows 主機文件並發現問題。

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