ansible windows主机管理(待补)

windows远程管理

不像linux/unix主机默认使用SSH进行配置,windows主机则需要使用WinRM。此篇主要介绍怎样配置和使用winRM用于ansible。

WinRM是一个用于windows主机之间的远程通信管理协议。它是一个基于SOAP的协议,交互使用的是HTTP/HTTPS,并且包括所有最新的windows系统。自win server 2012以来,WinRM已经被默认安装了,但是在大部分的ansible案例中,我们还需要对WinRM做额外的设置。

ansible用pywinrm包与windows服务器间的winRM进行交互。它不是默认集成在ansible包里,但是可以通过以下命令安装:

pip install "pywinrm>=0.3.0"


在这里遇到了一个问题,linux(CentOS 7.8)自带的Python为2.7版本。在执行Pip的时候找不到命令。
需要执行yum install python-pip,安装支持py2.7的python-pip包。然后就可以执行这个命令了。

[root@ansible ~]# pip -V
pip 8.1.2 from /usr/lib/python2.7/site-packages (python 2.7)

认证选项

试图连接windows主机的时候,有几个不同的选项进行认证。认证类型可能需要在inventory里的Hosts或者groups文件里的 ansible_winrm_transport变量。
下面这个图表是这些选项的高视角视图:

Option Local Accounts Active Directory Accounts Credential Delegation HTTP Encryption
Basic yes no no no
Certificate yes no no no
Kerberos no yes yes yes

Basic

Basic认证类型是最简单的,但是也是最不安全的。因为用户名和密码都是简单的base64编码,如果不使用安全隧道(比如HTTPS),那么它将会被任何人破解。Basci认证只能用于本地用户,不能用于域用户。
下面是Basic类型的主机变量配置:

ansible_user: LocalUsername
ansible_password: "Password"
ansible_connection: winrm
ansible_winrm_transport: basic

Basic认证类型不会被默认启动,但是可以通过在PowerShell中运行以下命令开启:

Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $true

Certificate

预留

Kerberos

Kerberos是推荐的域环境的认证方式。它支持很多特性,比如认证委派(credential delegation)以及基于HTTP的消息加密,并且是WinRM通信中相对于比较安全的认证方式。

Kerberos需要一些额外的设置。以下的例子展示了Kerberos认证的主机变量

ansible_user: username@MY.DOMAIN.COM
ansible_password: Password
ansible_connection: winrm
ansible_winrm_transport: kerberos

从ansible2.3开始,kerberos ticket会基于ansible_user和ansible_password两个变量进行创建。如果运行在就版本的ansible上或者ansible_winrm_kinit_mode是手动的话,kerberos ticket必须是已经创建的状态。以下是需要的额外的变量:

ansible_winrm_kinit_mode: managed/manual (manual means Ansible will not obtain a ticket)
ansible_winrm_kinit_cmd: the kinit binary to use to obtain a Kerberos ticket (default to kinit)
ansible_winrm_service: overrides the SPN prefix that is used, the default is ``HTTP`` and should rarely ever need changing
ansible_winrm_kerberos_delegation: allows the credentials to traverse multiple hops
ansible_winrm_kerberos_hostname_override: the hostname to be used for the kerberos exchange

安装Kerberos Library

一些系统依赖必须在使用之前安装,以下脚本列举了一些系统发行版本的依赖:

# Via Yum (RHEL/Centos/Fedora)
yum -y install gcc python-devel krb5-devel krb5-libs krb5-workstation

# Via Apt (Ubuntu)
sudo apt-get install python-dev libkrb5-dev krb5-user

# 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

一旦这些依赖被安装,Python-kerberos wrapper就可以通过pip来安装:

pip install pywinrm[kerberos]

主机配置Kerberos

依赖包安装完成之后,Kerberos需要做配置来与域进行通信。这个配置在/etc/krb5.conf文件配置。
在文件里以下面开头的部分配置Kerberos:

[realms]

添加主备域控的全域名,例如:

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

[domain_realm]开头的部分添加ansible需要访问的域,例如下:

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

还有一些其他的配置选项在这个文件里,比如默认域等。

posted @ 2021-03-25 18:29  小白运维狗  阅读(632)  评论(0)    收藏  举报