• ansible控制windows的官方翻译


    Ansible控制windows

    1、    Windows下如何工作

    在ansible控制linux的时候,用的是ssh的方式,在windows中,使用的是power shell,在客户端机器上也是不用装任何客户端的。

    在控制windows机器的时候,使用的模块为“winrm“。

    2、    在控制机上安装

    在linux控制机器上安装模块winrm:

    pip install "pywinrm>=0.1.1"

    3、    动态目录的支持

    如果想连接动态目录下的domain账户,那么必须安装python-kerberos模块在控制机上,并且需要安装MIT krb5库。还需要在动态目录中配置正确的账户。

    3.1 安装python-kerberos的依赖

    # Via Yum
    yum -y install python-devel krb5-devel krb5-libs krb5-workstation
     
    # Via Apt (Ubuntu)
    sudo apt-get install python-dev libkrb5-dev
     
    # Via Portage (Gentoo)
    emerge -av app-crypt/mit-krb5
    emerge -av dev-python/setuptools
     
    # Via pkg (FreeBSD)
    sudo pkg install security/krb5
     
    # Via OpenCSW (Solaris)
    pkgadd -d http://get.opencsw.org/now
    /opt/csw/bin/pkgutil -U
    /opt/csw/bin/pkgutil -y -i libkrb5_3
     
    # Via Pacman (Arch Linux)
    pacman -S krb5

    3.2 安装python-kerberos

    安装的时候执行如下指令即可:

    pip install kerberos

    3.3 配置kerberos

    编辑配置文件/etc/krb5.conf,在其中添加如下的信息,在每个想连接的domain中。

    找到如下开头的节:

    [realms]

    添加domain的全称,并且添加主要和次要的动态目录域的全名称,如下例子:

    [realms]
     
     MY.DOMAIN.COM = {
      kdc = domain-controller1.my.domain.com
      kdc = domain-controller2.my.domain.com
     }

    并且在【domain_realm】节中添加每个你想连接的域:

    [domain_realm]
        .my.domain.com = MY.DOMAIN.COM

    3.4 测试kerberos连接

    如果安装了krb5-workstation(yum)或者krb5-user(apt_get),那么可以用如下的命令测试是否被域控制器授权:

    kinit user@MY.DOMAIN.COM

    注意域的部分必须是全称,并且必须全部为大写。

    查看获得的tickets,可以使用命令如下:

    klist

    3.5 解决kerberos连接问题

    如果使用kerberos不能进行连接,那么检查下列问题:

    确保正向和反向DNS在域中能正常解析,在做这个解析的时候,首先ping服务器的名称,然后nslookup服务器的ip地址,会返回服务器的名称

    如果在返回的服务器名称和ping的服务器名称不一致,检查动态目录中的DNSScavenging 是开启的,并且DNS和DHCP是相互更新的;

    确保ansible控制机在domain中配置了账户属性。

    检查ansible控制机的在域控制器中是时钟异步的,kerberos是对时间敏感的,一点时间的偏差会导致tickets失效

    确保用的是域全名称,可以使用下面的命令进行检查:

    kinit -C user@MY.DOMAIN.COM
    klist

    当获取到不同的域名称的时候,必须更新配置文件krb5.conf,在其中使用域的全名称。

    4、    inventory

    ansible对windows的支持依赖于几个常用的变量来表示用户名,密码,连接类型(windows),如下所示:

    [windows]
    winserver1.example.com
    winserver2.example.com

    在group_vars/windows.yml中,定义以下inventory变量:

    # it is suggested that these be encrypted with ansible-vault:
    # ansible-vault edit group_vars/windows.yml
     
    ansible_user: Administrator
    ansible_password: SecretPasswordGoesHere
    ansible_port: 5986
    ansible_connection: winrm
    # The following is necessary for Python 2.7.9+ when using default WinRM self-signed certificates:
    ansible_winrm_server_cert_validation: ignore

    5、    关于powershell版本

    Powershell为3.0版本或者更高,只有windows7 sp1,windows server 2008 sp1,和以后的版本支持。

    6、    哪些模块是可用的

    Windows支持的模块在以下网址中可以找到:

    http://docs.ansible.com/ansible/list_of_windows_modules.html

    可以使用script模块来运行powershell脚本,也可以在playbook中使用,如下:

    - hosts: windows
      tasks:
        - script: foo.ps1 --argument --other-argument

    注意有的模块并不以win开头,如下:

    “slurp”, “raw”, and “setup” 

    7、    获得windows的fact

    ansible winhost.example.com -m setup

    8、    Windows的playbook例子

    下面例子表示推送和运行powershell脚本的例子:

    - name: test script module
      hosts: windows
      tasks:
        - name: run test script
          script: files/test_script.ps1

    运行单个命令的时候,使用raw模块,在linux中是使用command或者shell模块:

    - name: test raw module
      hosts: windows
      tasks:
        - name: run ipconfig
          raw: ipconfig
          register: ipconfig
        - debug: var=ipconfig

    运行DOS命令的时候,可以使用CMD /C开头,并且用双引号进行包括,如下:

    - name: another raw module example
      hosts: windows
      tasks:
         - name: Move file on remote Windows Server from one location to another
           raw: CMD /C "MOVE /Y C:	eststuffmyfile.conf C:uildssmtp.conf"

    最后一个例子用win_stat模块测试文件是否存在,注意返回的日期和linux中稍有不同:

    - name: test stat module
      hosts: windows
      tasks:
        - name: test stat module on file
          win_stat: path="C:/Windows/win.ini"
          register: stat_file
     
        - debug: var=stat_file
     
        - name: check stat_file result
          assert:
              that:
                 - "stat_file.stat.exists"
                 - "notstat_file.stat.isdir"
                 - "stat_file.stat.size>0"
                 - "stat_file.stat.md5"
    for linux and python
  • 相关阅读:
    手机维修费杂乱 消协命令设立扶植行业标准
    ImageList控件的使用方法
    三峡实习记之一
    [原创]2天的搜索经验对IIS的问题的全面解决方案
    亲历虚拟机安装Ubuntu Linux系统
    新的一年,新的开始
    VS2003中实现身份验证的探索经验
    [原创]VS2003中ASP.NET实现自定义用户导航控件
    全面控制Windows任务栏
    单刀赴广州
  • 原文地址:https://www.cnblogs.com/kellyseeme/p/5525074.html
Copyright © 2020-2023  润新知