使用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 に変更して、やり直してください。

禁用网络的方法

image.png

请确认能否从外部进行连接。

确认外部是否接收外部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"
}
广告
将在 10 秒后关闭
bannerAds