首先配置host文件
inventory 网上大多数是这样写的,只要这里写对也不会有后面的报错
all:children:windows:hosts:192.168.119.1:ansible_user: adminansible_password: passwordansible_port: 5985ansible_connection: winrmansible_winrm_transport: ntlm ##很重要ansible_winrm_server_cert_validation: ignore
但是如果想和Linux主机连接信息写在一个配置文件里
[win]
192.168.119.1 ansible_ssh_user=admin ansible_ssh_pass=admin ansible_ssh_port=5985 ansible_connection=winrm ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore
以下是摘录网上各种乱七八糟的问题的报错及解决过程。本次主要是想利用ansible 远程操作Windows ,当我运行
ansibile windows -m win_ping 时,报错:
?
ansibile windows -m win_ping?
192.168.119.1 | UNREACHABLE! => {"changed": false,"msg": "plaintext: the specified credentials were rejected by the server","unreachable": true
}
windows 中的我的winrm是之前装的,首先怀疑时winrm 的问题:
由于这里winrm 报错,所以先解决了下这个问题:
C:\Users\Sun>winrm e winrm/config/listener
WSManFaultMessage = 客户端无法连接到请求中指定的目标。 请验证该目标上的服务是否正在运行以及是否正在接受请求。 有关目标(通常是 IIS 或 WinRM)上运行的 WS 管理服务,请查阅日志和文档。 如果目标是 WinRM 服务,则在目标上运行以下命令来分析和配置 WinRM 服务: "winrm quickconfig"。错误编号: -2144108526 0x80338012
客户端无法连接到请求中指定的目标。 请验证该目标上的服务是否正在运行以及是否正在接受请求。 有关目标(通常是 IIS 或 WinRM) 上运行的 WS 管理服务,请查阅日志和文档。 如果目标是 WinRM 服务,则在目标上运行以下命令来分析和配置 WinRM 服务: "winrm quickconfig"。
解决:
PS C:\Users\Sun> Get-NetConnectionProfileName : 未识别的网络
InterfaceAlias : 以太网 2
InterfaceIndex : 18
NetworkCategory : Public
IPv4Connectivity : NoTraffic
IPv6Connectivity : NoTrafficName : 未识别的网络
InterfaceAlias : 以太网 3
InterfaceIndex : 16
NetworkCategory : Public
IPv4Connectivity : NoTraffic
IPv6Connectivity : NoTrafficName : 网络
InterfaceAlias : 以太网
InterfaceIndex : 20
NetworkCategory : Private
IPv4Connectivity : Internet
IPv6Connectivity : NoTrafficPS C:\Users\Sun> Set-NetConnectionProfile -NetworkCategory Private
PS C:\Users\Sun> Get-NetConnectionProfileName : 未识别的网络
InterfaceAlias : 以太网 2
InterfaceIndex : 18
NetworkCategory : Private
IPv4Connectivity : NoTraffic
IPv6Connectivity : NoTrafficName : 未识别的网络
InterfaceAlias : 以太网 3
InterfaceIndex : 16
NetworkCategory : Private
IPv4Connectivity : NoTraffic
IPv6Connectivity : NoTrafficName : 网络
InterfaceAlias : 以太网
InterfaceIndex : 20
NetworkCategory : Private
IPv4Connectivity : Internet
IPv6Connectivity : NoTrafficPS C:\Users\Sun> winrm e winrm/config/listener
ListenerAddress = *Transport = HTTPPort = 5985HostnameEnabled = trueURLPrefix = wsmanCertificateThumbprintListeningOn = 10.30.0.190, 10.30.101.134, 127.0.0.1, 162.254.90.168, 139.254.128.232, 172.16.56.50, 192.168.119.1, ::1, fe80::ffff:ffff:fffe%6, fe80::826:f327:488b:1c53%15, fe80::24e2:4e67:1515:4f15%16, fe80::ac8e:4703:91a8:c6ca%17, fe80::d806:27aa:1675:b14%22, fe80::d9d8:dcb9:f038:5dc8%7, fe80::f810:7cc1:4fc65:3caa%18
结果还是不行,又跟着操作了一波不知道时什么意思的命令还忘了验证我的问题有没有解决 ,不知道这里有没有起作用,但是感觉有点跑偏了,感兴趣的同学并且为了安全起见可以跳过这一步直接执行后面的 ,
自动化设置 WinRM:
get-executionpolicyset-executionpolicy remotesigned#下载https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1ConfigureRemotingForAnsible.ps1 -SkipNetworkProfileCheck
然后又执行了 pip install http://github.com/diyan/pywinrm/archive/master.zip#egg=pywinrm ,其实应该直接执行
pip install pywinrm 就好
到这里我又执行了下 ansible windows -m win_ping 结果发现成功了 :
反思一下,可能只是我的inventory写的有问题,inventory 文件中一定要有 ansible_winrm_transport: ntlm ,不然会报错:
plaintext: the specified credentials were rejected by the server ,如果大家只是遇到了上述报错,直接在inventory 配置就好。
此外我的winrm 有点小问题,顺便解决了winrm 的问题,winrm 这里一定别忘了防火墙的是否有限制 。
具体问题具体分析 ,具体问题具体分析 ,不能像我一样病急乱投医
参考链接:
Ansible管理Windows服务器 - 简书
Jenkins持续部署-Windows环境持续部署探究1_weixin_33881041的博客-CSDN博客
Windows Support — 国内最专业的Ansible中文官方学习手册
Setting up a Windows Host — Ansible Documentation