使用Windows Subsystem for Linux(WSL)在Windows10上安装Ansible并进行连接
我安装了Windows10的秋季创作者更新,并从Windows商店中安装了Ubuntsu。然后,我安装了Ansible,并尝试操作Windows10。
在WSL上的工作
我根据这个链接中介绍的步骤安装了Ansible。
由于WSL中的root密码未知,因此我们将使用sudo进行安装。
密码是在Ubuntu安装时指定的。
sudo apt-get update
sudo apt-get install python-pip git libffi-dev libssl-dev -y
pip install ansible pywinrm
source ~/.profile
确认版本
username@HOST:~$ ansible --version
ansible 2.4.0.0
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/username/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /home/username/.local/lib/python2.7/site-packages/ansible
executable location = /home/username/.local/bin/ansible
python version = 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609]
在被操作的Windows10上的工作中
运行一个脚本来接受Ansible通过WinRM连接的请求。
将Ansible公式脚本用PowerShell进行执行。
请在本地下载它:https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1
然后以管理员身份打开PowerShell控制台。
Set-ExecutionPolicy RemoteSigned -Force
PS D:\>.\ConfigureRemotingForAnsible.ps1
如果OK了,就完成了。
允许使用HTTP来连接WinRM。
默认情况下只允许HTTPS,为了使用HTTP,需要做出相应的修改。
PS C:\WINDOWS\system32> winrm set winrm/config/service '@{AllowUnencrypted="true"}'
Service
RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
MaxConcurrentOperations = 4294967295
MaxConcurrentOperationsPerUser = 1500
EnumerationTimeoutms = 240000
MaxConnections = 300
MaxPacketRetrievalTimeSeconds = 120
AllowUnencrypted = true
Auth
Basic = true
Kerberos = true
Negotiate = true
Certificate = false
CredSSP = false
CbtHardeningLevel = Relaxed
DefaultPorts
HTTP = 5985
HTTPS = 5986
IPv4Filter = *
IPv6Filter = *
EnableCompatibilityHttpListener = false
EnableCompatibilityHttpsListener = false
CertificateThumbprint
AllowRemoteAccess = true
如果发生错误
如果在安装Docker For Windows等软件时遇到了这样的错误,您可以暂时禁用适配器本身来避免这个问题。
PS C:\WINDOWS\system32> winrm set winrm/config/service '@{AllowUnencrypted="true"}'
WSManFault
Message
ProviderFault
WSManFault
Message = このコンピューターのネットワーク接続の種類の 1 つが Public に設定されているため、WinRM ファイアウォール例外は機能しません。 ネットワーク接続の種類を Domain または Private に変更して、やり直してください。
エラー番号: -2144108183 0x80338169
このコンピューターのネットワーク接続の種類の 1 つが Public に設定されているため、WinRM ファイアウォール例外は機能しません。 ネットワーク接続の 種類を Domain または Private に変更して、やり直してください。
禁用网络的方法
请确认能否从外部进行连接。
确认外部是否接收外部WinRM连接的端口。
如果存在HTTP端口,则表示正常。
PS C:\WINDOWS\system32> winrm enumerate winrm/config/listener
Listener
Address = *
Transport = HTTP
Port = 5985
Hostname
Enabled = true
URLPrefix = wsman
CertificateThumbprint
ListeningOn = ~~~
Listener
Address = *
Transport = HTTPS
Port = 5986
Hostname = HOST
Enabled = true
URLPrefix = wsman
CertificateThumbprint = 1F9DA18E3B0F74D82ACBDE4188FC5276F238B369
ListeningOn = ~~~
从WSL连接到本机(Windows10)。
创建设置文件 du fichier de configuration)
在WSL的主目录中创建一个名为hosts的事件文件。
xxxx@HOST:~$ pwd
/home/username
username@HOST:~$ vi hosts
事件文件的编写方式如下所示。
[windows]
192.168.xxx.xxx ⇒ 自ホスト(Windows10)のIPアドレス
[windows:vars]
absible_user=Windows10のログインユーザ名
ansible_password=Windows10のログインパスワード
ansible_port=5985
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
确认连接到Ansible的主机(Windows 10)。
在我的环境中,如果不添加”-u”选项,就会出现这样的错误,让我相当困扰。
username@HOST:~$ ansible windows -i hosts -m win_ping
192.168.xxx.xxx | UNREACHABLE! => {
"changed": false,
"msg": "plaintext: auth method plaintext requires a username",
"unreachable": true
}
只要添加“-u”选项,就能成功。
username@HOST:~$ ansible windows -i hosts -m win_ping -u ansible_userと同じユーザ名
192.168.xxx.xxx | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}