So zwingen Sie Ansible, http + Kerberos zu verwenden (Fehler WINRM-VERBINDUNGSFEHLER: 401 – Nicht autorisiert.)

So zwingen Sie Ansible, http + Kerberos zu verwenden (Fehler WINRM-VERBINDUNGSFEHLER: 401 – Nicht autorisiert.)

Ich konfiguriere Ansible (CentOS 6.7) für die Verbindung mit einem Windows-Rechner über http, winRM und Kerberos

Aus der /etc/ansible/hostDatei

[training]
machinename:5985

Ich habe eine hostspezifische YAML-Datei eingerichtet

ansible_winrm_scheme: http
ansible_port: 5985
ansible_connection: winrm

Dann folgt der folgende Befehl

 ansible machinename -m win_ping -vvvv

Fehler bei folgenden

<machinename > ESTABLISH WINRM CONNECTION FOR USER: jnambood on PORT 5985 TO machinename 
<machinename > WINRM CONNECT: transport=plaintext endpoint=http://machinename :5985/wsman
<machinename > WINRM CONNECTION ERROR: 401 Unauthorized.


<machinename > WINRM CONNECT: transport=plaintext endpoint=https://machinename :5985/wsman
<machinename > WINRM CONNECTION ERROR: 500 WinRMTransport. [Errno 1] _ssl.c:492: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
machinename  | FAILED => 500 WinRMTransport. [Errno 1] _ssl.c:492: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Ansible hat versucht, eine HTTP-Verbindung herzustellen, aber es ist ein 401-Fehler aufgetreten. Wie kann ich das beheben?

Antwort1

Wenn Sie das Kerberos-Modul installiert haben und ansible_user @ enthält (z. B. username@realm), versucht Ansible zunächst eine Kerberos-Authentifizierung. Diese Methode verwendet den Principal, mit dem Sie auf der Steuermaschine bei Kerberos authentifiziert sind, und nicht ansible_user. Wenn dies fehlschlägt, entweder weil Sie auf der Steuermaschine nicht bei Kerberos angemeldet sind oder weil das entsprechende Domänenkonto auf dem Remote-Host nicht verfügbar ist, greift Ansible auf die „einfache“ Benutzername/Passwort-Authentifizierung zurück.~Ansible Windows-Einführung

$ cat ansible/group_vars/os-windows.yml
# <user>@<realm> means use principal in krb5cc, name here doesn't matter
ansible_ssh_user: use@KERBEROS
ansible_ssh_port: 5985
ansible_connection: winrm

$ ansible host.ad.example.com -m win_ping -o
host.ad.example.com | success >> {"changed": false, "ping": "pong"}

verwandte Informationen