我有一本配置Windows Server的手册。该剧本是从Ansible的RHEL服务器执行的。 RHEL服务器具有所有必需的kerberos配置,并且Ansible配置为使用Windows主机的kerberos身份验证通过HTTP使用Winrm。所有这些都很好,我只kinit
一次,一切正常。
对于剧本中的一项任务,我需要首先从REST API中检索一些信息。 REST API使用IIS托管在Windows服务器上,并具有Windows身份验证。
我想使用win_uri
或uri
模块来从REST API检索信息,但是我不想提供凭据。它可以在(win_)shell
模块中使用,为什么不能在(win_)uri
模块中使用?
---
- name: API Test
vars_files:
- secret.yml
vars:
api_url: http://iiswebserver.my.domain/api/item/0
hosts:
- windowshost.my.domain
gather_facts: no
#debugger: on_failed
tasks:
- name: Win Shell
win_shell: |
Invoke-RestMethod -Method Get -Uri {{ api_url }} -UseDefaultCredentials
register: win_shell_get
- name: Local Shell
shell: |
curl --negotiate -u : {{ api_url }}
register: shell_get
delegate_to: localhost
- name: Get API info remote
win_uri:
url: "{{ api_url }}"
method: GET
return_content: yes
user: "{{ secret_user }}"
password: "{{ secret_password }}"
#delegate_to: localhost
register: api_get
- name: Get API info local
uri:
url: "{{ api_url }}"
method: GET
return_content: yes
#user: "{{ secret_user }}"
#password: "{{ secret_password }}"
#other: --negotiate
delegate_to: localhost
register: api_get_local
两个Shell任务都可以正常工作,而无需输入凭据。
仅当我通过不需要的凭据时,才使用win_uri
模块。
win_uri模块是在目标主机上的系统上下文下执行的,并且由于shell命令有效,因此我假设win_uri
模块也应该起作用。
在本地主机上使用uri
模块不起作用。我尝试了几种参数组合(这些是注释行),但似乎无法使其正常工作。
答案 0 :(得分:-2)
根据输出,您的iis设置为使用ntlm aka Windows身份验证而不使用kerberos,它在服务器上无法正常运行的原因是因为您进行了身份验证。 将iis设置更改为匿名