For people running into the same problem, this is (more or less) the
playbook I use :
- hosts: all
tasks:
- name: Install prerequisite software (using yum)
yum:
enablerepo: epel
update_cache: yes
name: "{{ item }}"
state: present
with_items:
- python-pip
- python-ptyprocess
delegate_to: localhost
- name: Uninstall old pexpect package (using yum)
yum:
name: pexpect
state: absent
delegate_to: localhost
- name: Install prerequisite software (using pip)
pip:
name: pexpect
version: 3.3
state: present
delegate_to: localhost
- name: Check for precense of Kerberos ticket
command: /usr/bin/klist
register: klist_result
changed_when: no
ignore_errors: yes
delegate_to: localhost
- name: Request Kerberos ticket if none present
expect:
command: /usr/bin/kinit domain-user@AD-DOMAIN
responses:
'(?i)password': domain-user-password
changed_when: no
when: klist_result.rc != 0
delegate_to: localhost
The first task installs prerequisite software for the expect module using
rpm's from EPEL <https://fedoraproject.org/wiki/EPEL>. The version of
pexpect (another prerequisite) that the Red Hat and CentOS rpm's provide is
too old for Ansible, so we uninstall this in the second task. The third
task installs the required version of pexpect using pip. The third and
fourth tasks actually deal with requesting a Kerberos ticket granting
ticket when it is not present.
Regards,
Willem.
On Tuesday, June 7, 2016 at 1:51:25 PM UTC+2, Willem Bos wrote:
>
> Hi all,
>
> I'm trying to use winrm to execute tasks on a windows server (after
> following the steps in http://docs.ansible.com/ansible/intro_windows.html).
> As a test I use the win_ping module. This works only when a Kerberos ticket
> present beforehand.
>
> Is it a requirement to have the Linux server be member of the AD
> infrastructure? If so, then the only way to make this work from a controle
> machine - without joining the domain - would be to run a kinit from my
> playbook first, right? I found several similar cases but none mention if AD
> membership is a 'hard' requirement.
>
>
> *** INFO ***
> rpm -qa | grep -E
> "ansible|python-devel|krb5-devel|krb5-libs|krb5-workstation|python-kerberos"
> | sort
> ansible-2.0.2.0-1.el7.noarch
> krb5-devel-1.13.2-12.el7_2.x86_64
> krb5-libs-1.13.2-12.el7_2.x86_64
> krb5-workstation-1.13.2-12.el7_2.x86_64
> python-devel-2.7.5-34.el7.x86_64
> python-kerberos-1.1-15.el7.x86_64
>
> pip list | grep winrm
> pywinrm (0.1.1)
>
>
> *** WORKS ***
> kinit domain-user@AD-DOMAIN
> ...
>
> klist
> Ticket cache: KEYRING:persistent:0:0
> Default principal: domain-user@AD-DOMAIN
>
> Valid starting Expires Service principal
> 06/07/2016 11:26:20 06/07/2016 21:26:20 krbtgt/AD-DOMAIN@AD-DOMAIN
> renew until 06/14/2016 11:26:20
>
> ansible -m win_ping windows-server.ad-domain
> windows-server.ad-domain | SUCCESS => {
> "changed": false,
> "ping": "pong"
> }
>
>
> *** DOESN'T WORK ***
> kdestroy -A
>
> ansible -m win_ping windows-server.ad-domain -vvvvv
> Using /etc/ansible/ansible.cfg as config file
> Loaded callback minimal of type stdout, v2.0
> <windows-server.ad-domain> ESTABLISH WINRM CONNECTION FOR USER:
> domain-user@AD-DOMAIN on PORT 5986 TO windows-server.ad-domain
> <windows-server.ad-domain> WINRM CONNECT: transport=kerberos endpoint=
> https://windows-server.ad-domain:5986/wsman
> <windows-server.ad-domain> WINRM CONNECTION ERROR: (('Unspecified GSS
> failure. Minor code may provide more information', 851968), ('No Kerberos
> credentials available', -1765328243))
> Traceback (most recent call last):
> File
> "/usr/lib/python2.7/site-packages/ansible/plugins/connection/winrm.py",
> line 134, in _winrm_connect
> protocol.send_message('')
> File "/usr/lib/python2.7/site-packages/winrm/protocol.py", line 193, in
> send_message
> return self.transport.send_message(message)
> File "/usr/lib/python2.7/site-packages/winrm/transport.py", line 269, in
> send_message
> krb_ticket = KerberosTicket(self.krb_service)
> File "/usr/lib/python2.7/site-packages/winrm/transport.py", line 205, in
> __init__
> kerberos.authGSSClientStep(krb_context, '')
> GSSError: (('Unspecified GSS failure. Minor code may provide more
> information', 851968), ('No Kerberos credentials available', -1765328243))
>
> windows-server.ad-domain | FAILED! => {
> "failed": true,
> "msg": "kerberos: (('Unspecified GSS failure. Minor code may provide
> more information', 851968), ('No Kerberos credentials available',
> -1765328243))"
> }
>
> Regards,
> Willem
>
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/9c9c9bed-d3d4-4457-854f-e49320ee7eab%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.