在远程 Windows 服务器上
PS C:\Users\name.domain> Winrm quickconfig
WinRM service is already running on this machine.
WinRM is already set up for remote management on this computer.
在安装了 Ansible 的 Linux 主机上:
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]
Valid starting Expires Service principal
09/19/2016 10:02:18 09/19/2016 20:02:18 krbtgt/[email protected]
renew until 09/26/2016 10:02:12
/etc/ansible/hosts
[local]
127.0.0.1
[windows]
ip address
[windows:vars]
ansible_user= [email protected]
ansible_password= password
ansible_port= 5985
ansible_connection= winrm
# ansible windows -m win_ping
ip_address | UNREACHABLE! => {
"changed": false,
"msg": "kerberos: requested auth method is kerberos, but requests_kerberos is not installed, ssl: HTTPSConnectionPool(host='ip_address', port=5986): Max retries exceeded with url: /wsman (Caused by ConnectTimeoutError(<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x3585d90>, 'Connection to ip_address timed out. (connect timeout=30)'))",
"unreachable": true
}
答案1
错误信息非常清楚:
“msg”:“kerberos:请求的身份验证方法是 kerberos,但未安装requests_kerberos
要使用具有 Kerberos 身份验证的 Ansible Windows 支持,必须在控制主机上安装一些依赖项:
如果您希望连接到通过 Active Directory 发布的域帐户(而不是在远程主机上创建的本地帐户),则需要在 Ansible 控制主机上安装“python-kerberos”模块(以及它所依赖的 MIT krb5 库)。Ansible 控制主机还需要在 Active Directory 中正确配置计算机帐户。
请参阅 Ansible 文档活动目录支持以获取进一步的指示。
模块的情况ping
可能有点令人困惑。这些模块用于确保 Ansible 能够在目标主机上执行命令。有人可能会认为 Ansible 会ping
在目标主机的控制箱上运行命令。但事实并非如此。
因此实际win_ping
模块是用 编写的PowerShell
,将在目标主机上执行,因此需要适当的 Kerberos 设置。win_ping
模块的代码位于Ansible ansible-modules-core 存储库。