Ansible msg:“未安装Winrm或请求:无法导入名称证书”

时间:2019-01-04 19:21:02

标签: python ansible winrm

我正在尝试使用Ansible的win_ping模块从Linux控制计算机ping Windows主机。

问题:
我从与“主机”文件相同的目录中运行以下命令,并遇到“ winrm或未安装请求:无法导入名称证书”错误。

$> ansible win -i ./hosts -m win_ping
dev-app1 | FAILED! => {
    "msg": "winrm or requests is not installed: cannot import name certs"
}


“主机”中的定义:

[win]
dev-app1 ansible_host=10.123.456.78

[win:vars]
ansible_user=admin
ansible_password=adminspassword
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore

我的Linux机器上安装的所有软件的版本:
* ansible 2.7.2
* python版本= 2.7.5(默认值,2018年9月12日,05:31:16)[GCC 4.8.5 20150623(Red Hat 4.8.5-36)]
* Winrm:python2-winrm-0.3.0-1.el7.noarch
*请求:
python-requests-2.6.0-1.el7_1.noarch
python2-requests_ntlm-1.1.0-1.el7.noarch

您知道导致错误的原因是什么吗?可能是由于版本不兼容或其他缺少的模块吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

即使通过yum已经安装了python2-winrm版本0.3.0,这仍然失败。 原因:yum不会为winrm安装所有相关模块。改用python软件包管理器(pip)。

thinkred1cartoon:$ ansible all -i hosts.txt -m win_ping
172.16.96.135 | FAILED! => {
    "msg": "winrm or requests is not installed: cannot import name certs"

找到已安装的确切Winrm软件包-

yum list installed | grep winrm
python2-winrm.noarch              0.3.0-1.el7                @epel

运行接下来的2条命令-

1)    yum autoremove python2-winrm.noarch   #uninstalls python2-winrm.noarch along with all its dependencies

2)    pip install "pywinrm>=0.3.0"          # Installs pywinrm using pip. 

More detail here

然后ping:pong在https上工作得很好,端口= 5986

ram@thinkred1cartoon$ ansible all -i hosts.txt -m win_ping
172.16.96.135 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

快速浏览一下我的库存状况:

ram@thinkred1cartoon$ cat hosts.txt           

[win]
172.16.96.135

[win:vars]
ansible_user='Raman'
ansible_password='XXXXX'
#ansible_port=5985
ansible_port=5986
ansible_connection=winrm
#ansible_winrm_scheme=http
ansible_winrm_scheme=https
ansible_winrm_server_cert_validation=ignore

相反,如果您不能/不想运行命令1,则命令2将对您不起作用。 在这种情况下,仅运行命令3。

3 ) pip install --ignore-installed "pywinrm>=0.3.0"