It is definitely surprising but not sure if necessarily its a bug in 
ansible.

Bear with me, I'll try and explain why:

If you regard kerberos tickets (that let you access your windows domain 
machines) as being analogous to ssh keys (that let you access your linux 
machines) then ansible is at least consistent in that in both cases it is 
up to you to acquire the necessary thing (kerberos ticket, ssh key) and is 
not something that ansible manages (unless you make your playbooks do so).

In your case you have (inadvertently) acquired a kerberos ticket by logging 
in to your controller.  That ticket is potentially a powerful thing as 
(unlike an ssh key) it may give you access to any host belonging to that 
domain.  When ansible attempts to connect it finds you have a ticket for 
the domain and so it uses it.
This is pretty much exactly what you would expect if (lets pretend for a 
minute) your ansible controller was a windows machine.  If you'd logged 
into host A as user1@DOMAIN and tried to pick up a file on a share from 
host B then windows would be using user1@DOMAIN credentials to see if you 
have permission to access the share on host B.

Thinking about your scenario in the same way you are logging in to your 
controller as user1@DOMAIN but then asking ansible to access your windows 
domain hosts as user2@DOMAIN.

I'm not saying what you are doing is wrong but I think Ansible should be 
flexible enough to cope with other scenarios as well.

For instance I value the ability to connect to more than one domain from my 
ansible controller, so for me logging in to the controller as a user on a 
particular domain isn't a goal.

I get round the need to acquire kerberos tickets before I start connecting 
to anything by using a custom ansible callback plugin (findable on this 
list or ansible-devel I think if you are interested).  The callback plugin 
has its limitations though (main one being not working with the ansible 
command, only ansible-playbook), and it would probably be a lot simpler to 
wrap up calls to ansible and ansible-playbook in a shell script that calls 
kinit before you start.

So yes it is surprising but when you think about the way the individual 
pieces involved work its really just a consequence of putting together 
technologies that weren't designed to work together.

I'm curious to know if you just put 
ansible_ssh_user: @DOMAIN
or even
ansible_ssh_user: @
in your vars whether the behaviour would be any different from what you are 
getting now.

That could actually be quite a nice way of reflecting that it is using 
whatever tickets are available, rather than what is specified.

By all means raise a bug report - I think we should at the minimum document 
how it behaves in your scenario.  I'm just not sure ansible should be 
forced to acquire the kerberos ticket - what do others think?

Jon

On Wednesday, August 19, 2015 at 12:46:37 PM UTC+1, Amir Luzon wrote:
>
> yes it does, thank you.
>
> does this not seem like a bug?
>
> On Wednesday, August 19, 2015 at 2:40:53 PM UTC+3, J Hawkesworth wrote:
>>
>> I think this is because when you logged into the machine, as part of the 
>> login process a kerberos ticket has been cached for the user you logged in 
>> as.
>>
>> When ansible runs, the winrm connection plugin determines that you want 
>> to connect via kerberos (there is a bit of guessing going on here, from 
>> memory it is assumed you want to connect using kerberos based on having an 
>> @ in the ansible_ssh_user and having the python kerberos library loaded.
>>
>> The actual authorisation is then handled by the kerberos library and 
>> since you have a kerberos ticket (as a result of logging in), I suspect it 
>> is using that.
>>
>> If you can I suggest you install krb5-workstation and then log in as 
>> whichever user, then try running klist to see what tickets are cached for 
>> your user.
>>
>> if you want to manually create a ticket for the other user, you can do 
>> that like this:
>>
>> kinit [email protected]
>>
>> (note domain name must be in upper case).
>>
>> Does that clarify things at all?
>>
>>
>>
>>
>>
>> On Wednesday, August 19, 2015 at 11:38:26 AM UTC+1, Amir Luzon wrote:
>>>
>>> LDAP user is a user in the active directory.
>>>
>>> "and ansible is then attempting to use your kerberos credentials to talk 
>>> to your windows machines." - but we configured the "ansible_ssh_user| to a 
>>> specific user and it is not using that user but the user logged in to the 
>>> control machine...why is that?
>>>
>>> The control machine is: Linux version 2.6.32-504.16.2.el6.x86_64 (
>>> [email protected]) (gcc version 4.4.7 20120313 (Red Hat 
>>> 4.4.7-11) (GCC) ) 
>>>
>>> On Wednesday, August 19, 2015 at 12:56:53 PM UTC+3, J Hawkesworth wrote:
>>>>
>>>> Not hit this- I'm not sure what you mean by 'LDAP (windows) users' but 
>>>> if you are logging in to your ansible controller using a windows domain 
>>>> user, and password then chances are you are using kerberos and ansible is 
>>>> then attempting to use your kerberos credentials to talk to your windows 
>>>> machines.
>>>>
>>>> You don't mention which OS you are running your ansible controller on 
>>>> but if you have krb5-workstation (yum package) or apt-get equivalent 
>>>> installed, you can run the command 
>>>>
>>>> klist
>>>>
>>>> which will show any kerberos credentials you have.  I suspect ansible 
>>>> is using these.
>>>>
>>>> If I'm right then I think your options are
>>>>
>>>> a/ use a local user on your windows machines (change 
>>>> ansible_ssh_user=some_local_user not a user@domain)
>>>>
>>>> b/ log in to your ansible controller as a domain user with suitable 
>>>> privileges for whatever it is you need to do on your windows machines and 
>>>> change your 
>>>>  ansible_ssh_user=domain_user_you_logged_in_to_ansible_as@DOMAIN )
>>>>
>>>> Hope the above helps
>>>>
>>>> Jon
>>>>
>>>> On Wednesday, August 19, 2015 at 9:19:46 AM UTC+1, Amir Luzon wrote:
>>>>>
>>>>> hi guys,
>>>>>
>>>>> our control machine is configured so that we can login to the machine 
>>>>> with our LDAP (windows) users. from there we run ansible playbooks.
>>>>>
>>>>> here are some of the configurations we use:
>>>>>
>>>>> [windows:vars]
>>>>> ansible_ssh_user=[DeployUser]@[OurDomain]
>>>>> ansible_ssh_pass=password
>>>>> ansible_connection=winrm
>>>>>
>>>>> the [DeployUser] is not the same as the LDAP user to login to the 
>>>>> ansible control machine.
>>>>>
>>>>> yet when running powershell modules on a windows machine we noticed 
>>>>> that Ansible will use the LDAP user used to login to control machine and 
>>>>> not the user configured in the hosts file on ansible_ssh_user. 
>>>>>
>>>>> from what i understand ansible should use the ansible_ssh_user on 
>>>>> windows machine to do whatever but for us it uses the LDAP user???
>>>>>
>>>>> anyone encounter this issue? please help!
>>>>>
>>>>>
>>>>> thanks in advance
>>>>>
>>>>

-- 
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/8a0b89da-abf2-4153-ac47-f3b5e586d4b1%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to