官方文档查看:https://docs.ansible.com/ansible/latest/user_guide/windows.html

Ansible 从1.7+版本开始支持Windows,但前提是管理机必须为Linux系统,远程主机的通信方式也由SSH变更为PowerShell,同时管理机必须预安装Python的Winrm模块,方可和远程Windows主机正常通信,但PowerShell需3.0+版本且Management Framework 3.0+版本。
简单总结如下:
(1)管理机必须为Linux系统且需预安装Python Winrm模块
(2) 底层通信基于PowerShell,版本为3.0+,Management Framework版本为3.0+
(3) 远程主机开启Winrm服务

一、windows主机上的配置

1. 查看powershell执行策略

get-executionpolicy


常见执行策略有一下几种:
Unrestricted:权限最高,可以不受限制执行任何脚本。
Default:为Powershell默认的策略:Restricted,不允许任何脚本执行。
AllSigned:所有脚本都必须经过签名才能在运行。
RemoteSigned:本地脚本无限制,但是对来自网络的脚本必须经过签名。

2、更改powershell策略为remotesigned

set-executionpolicy remotesigned

3、查看powershell版本,如果是3.0不用升级

4、设置Windows远端管理(WS-Management,WinRM)

(1)winrm service 默认都是未启用的状态,先查看状态;如无返回信息,则是没有启动;

winrm enumerate winrm/config/listener


(2)针对winrm service 进行基础配置:
此过程还具有打开所需端口的防火墙并启动WinRM服务的额外好处
针对http

winrm quickconfig


对于https服务配置,使用

winrm quickconfig -transport:https

(3)查看winrm service listener:

winrm e winrm/config/listener


(4)修改winrm配置,启用远程连接认证
为winrm service 配置auth:

winrm set winrm/config/service/auth '@{Basic="true"}'

等效命令

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


为winrm service 配置加密方式为允许非加密:
AllowUnencrypted: 此选项定义WinRM是否允许在没有消息加密的情况下在HTTP上运行的通信。只有当Ansible_winrm_Transfer为NTLM、Kerberos或Credit ssp时,才有可能进行消息级加密。默认情况下,这是false,只应在调试WinRM消息时设置为true。这只应用于开发和调试目的,因为从Ansible发送的任何内容都可以查看、操作,远程会话也可以被同一网络上的任何人完全接管。

winrm set winrm/config/service '@{AllowUnencrypted="true"}'


远程windows主机配置到此结束

二、CENTOS7 管理机上配置

1、配置hosts文件:

vim /etc/ansible/hosts

添加如下内容

[windows]
192.168.52.12 ansible_ssh_user="Administrator" ansible_ssh_pass="P@ssw0rd" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore

192.168.52.12 为windows主机ip
ansible_winrm_server_cert_validation=ignore 不需要证书认证

查看是否ping通

出现该提示是因为需预安装Python Winrm模块

如果没有安装pip, 请先安装对应于你的Python版本的pip:

sudo easy_install pip

再安装winrm

pip install pywinrm

这个时候再执行

ansible 192.168.52.12 -m win_ping

可以看到是可以ping通了的

三、centos中远程操作windows

官方命令介绍:
https://docs.ansible.com/ansible/latest/modules/list_of_windows_modules.html#windows-modules

1、win_ping 查看windows是否存活

ansible windows -m win_ping

存活状态如下

windows管制状态如下:

执行命令成功,说明shell执行本身没有问题

ansible windows -m win_shell -a "get-executionpolicy"

2、win_copy—拷贝文件到远程Windows主机

https://docs.ansible.com/ansible/latest/modules/win_copy_module.html#win-copy-module

ansible windows -m win_copy -a 'src=/root/windows-tranport/test.txt dest=E:\centosFile\test.txt'


报错:

Exception calling "Run" with "1" argument(s): "Exception calling "Invoke" with
"0" argument(s): "Command execution stopped because the preference variable "ErrorActionPreference"
or common parameter is set to Stop: Illegal characters in path.""
At line:47 char:5
+     $output = $entrypoint.Run($payload)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordException+ FullyQualifiedErrorId : ScriptMethodRuntimeException

看不懂啥问题,
把目标文件名去掉就可以运行成功了,但是目录或者文件名只能用原始的,不能指定拷贝后文件的重命名。
试了几次,发现是目标路径的分隔符问题,用\会有问题,换成/ 或者\ 就OK

ansible 192.168.52.12 -m win_copy -a 'src=/root/windows-tranport/test.txt dest=E:\centosFile\'

192.168.52.12 | SUCCESS => {"changed": true, "checksum": "04f29fd9c9d1b851a54d4199950b8d352fd48263", "dest": "'E:\\centosFile\\test.txt'", "operation": "file_copy", "original_basename": "test.txt", "size": 127, "src": "/root/windows-tranport/test.txt"
}

返回结果

  • operation: “file_copy”—执行的操作为 file_copy;
  • original_basename: 文件名;
  • size: 文件大小 bytes。
  • src: 源路径
  • dest:目标路径
  • checksum:复制文件到远程主机,每次备份会产生一个md5sum,如果两次赋值文件的md5sum相同,那么就不会再次执行复制动作

win_copy的参数

23 33
222 333
参数 可选参数 作用
decrypt yes / no ,默认 yes 此选项控制使用vault的源文件的自动解密。
src 要将文件复制到远程服务器的本地路径; 可以是绝对的或相对的。如果path是一个目录,它将被复制(包括源文件夹名称)递归到dest。如果path是一个目录并以“/”结尾,则只有该目录的内部内容被复制到目标。 否则,如果它不以“/”结尾,则复制具有所有内容的目录本身。如果path是一个文件并且dest以“”结尾,则该文件将被复制到具有相同文件名的文件夹中
dest 文件应该复制到的远程绝对路径。 如果src是一个目录,它也必须是一个目录。在“双引号”中使用作\为路径分隔符或\。如果dest以\ source结尾,或者source的内容将被复制到目录而不重命名。如果dest是不存在的路径,那么只有当dest以“/”或“\”结尾,或者src是一个目录时才会创建它。如果src和dest是文件,并且dest的父目录不存在,则该任务将失败。
force yes / no,默认 yes 如果设置为yes,则只有在内容与目标不同时才会传输文件。如果设置为no,则仅在目标不存在时传输文件。如果设置为no,则不执行内容的校验,这可以帮助提高较大文件的性能。
remote_src yes / no,默认 no 如果为no,它将在原始/主机上搜索src,如果为yes,它将转到src的远程/目标拿取文件

四、Ansible主要命令的参数

参考:https://www.cnblogs.com/dachenzi/p/8916521.html

1、ansible 命令主要参数信息

-u : remote user,默认使用root用户登陆
-i : Inventory,指定主机,默认是/etc/ansible/hosts
-m :指定模块的名称(不指定-m,那么默认是command模块)
-a : 模块的参数(比如使用command模块,那么-a参数就是要执行的命令)
-k : 用来提示输入远程主机的密码(基于用户密码登录)
-f : 一次执行几个进程(并发数量),默认为5个
–sudo : 执行命令时使用 sudo 权限(需要用户具有sudo权限)
–key-file: 建立SSH链接的私钥文件
–list-hosts: 列出匹配到的服务器列表

2、Inventory文件

/etc/ansible/hosts:(默认的Inventory)
[test] # 用于定义主机组,all表示所有主机,所以尽量避免使用all作为组名
127.0.0.1 # 该组的主机列表,可以是主机名(dns解析)或者IP地址,或者用符号来表示连续的主机
192.168.1.[80:88] # 表示 192.168.1.80 - 192.168.1.88
[web:children] # 表示子组
nginx # nginx组
test # test组

配置文件中的变量及参数:

ansible_ssh_user : 用于指定管理远程主机的帐号
ansible_ssh_host : 用于指定被管理的主机
ansible_ssh_port :用于指定ssh的端口
ansible_ssh_private_key_file :指定key文件
host_key_checking=False :当第一次连接主机时,会提示yes/no,跳过此次环节
ansible_connection=“winrm” : windows的连接方式
ansible_winrm_server_cert_validation=ignore

3、file文件属性参数

参数
  • force: 在两种情况下会强制创建软连接,默认值为 no。 1、 源文件不存在但之后会建立的情况下;2、目标软连接已存在,需要先取消之前的软连,然后创建新的软链
  • group:定义文件的属组
  • mode:定义文件的权限
  • owner:定义文件的属主
  • path:必选项,定义文件的路径
  • recurse:递归设置文件的属性,只对目录生效(-R)
  • src:要被链接的源文件的属性,只应用于state=link的情况
  • dest:被链接到的路径,只应用与state=link的情况
  • state:
  • directory:如果目录不存在创建目录
  • file:即使文件不存在,也不会被创建
  • link:创建软连接
  • hard:创建硬链接
  • touch:如果文件不存在,则会创建一个新的文件,如果文件存在,则会更新其最后修改时间
  • absent:删除目录,文件或者取消链接文件

例子 test 为hosts配置的测试的主机组

ansible test -m file -a 'src=/etc/fstab dest=/tmp/fstab state=link' -k       # 等于 ln -s /etc/fstab /tmp/fstab
ansible test -m file -a 'path=/tmp/fstab state=absent' -k                                           # 删除文件
ansible test -m file -a 'path=/tmp/lixin.txt state=touch owner=nobody group=nobody mode=666' -k     # 创建文件指定其属主,属组,权限

4、模块的返回值

Ansible通过模块来执行具体的操作,由于模块功能千差万别,所以执行模块操作后,Ansible会根据不同的需要返回不同的结果,Ansible中一些常见的返回值如下:

  • changed:几乎所有的Ansible模块都会返回该变量,表示模块是否对远程主机进行了操作
  • failed:如果模块未能执行完成,将返回failed和true msg:模块执行失败的原因,常见的错误如ssh连接失败,没有执行权限等
  • rc:与命令行相关的模块会返会rc,表示执行Linux名的返回码 stdout:与rc相似,返回的是标准输出的结果
  • stderr:与rc详细,返回的是标准差错误输出 backup_file:所有存在backup选项的模块,用来返回备份文件的路径
  • results:应用在Playbook中存在循环的情况,返回多个结果

5、setup 用于获取系统信息的一个模块
https://buji595.github.io/2019/05/27/Ansible%20Ad-hoc%E5%B8%B8%E7%94%A8Module/#setup

# 查看模块参数
[root@ansible ~]# ansible-doc -s setup# 查看系统所有信息
[root@ansible ~]# ansible 192.168.1.31 -m setup# filter 对系统信息进行过滤
[root@ansible ~]# ansible 192.168.1.31 -m setup -a 'filter=ansible_all_ipv4_addresses'# 常用的过滤选项
ansible_all_ipv4_addresses         所有的ipv4地址
ansible_all_ipv6_addresses         所有的ipv6地址
ansible_architecture               系统的架构
ansible_date_time                  系统时间
ansible_default_ipv4               系统的默认ipv4地址
ansible_distribution               系统名称
ansible_distribution_file_variety  系统的家族
ansible_distribution_major_version 系统的版本
ansible_domain                     系统所在的域
ansible_fqdn                       系统的主机名
ansible_hostname                   系统的主机名,简写
ansible_os_family                  系统的家族
ansible_processor_cores            cpu的核数
ansible_processor_count            cpu的颗数
ansible_processor_vcpus            cpu的个数

ansible 远程windows相关推荐

  1. Ansible在windows的使用

    Ansible在windows的使用 1.linux离线安装ansible 参考博客: ansible离线安装 相关的安装包: 链接:https://pan.baidu.com/s/1vqUSk3B_ ...

  2. ubuntu远程windows桌面

    ubuntu远程windows桌面: applications-internet-terminal server client-computer:要远程的目标主机ip,protocol: RDPv5, ...

  3. linux下使用rdesktop连接远程windows

     sudo apt-get install rdesktop rdesktop 124.42.120.174:1433 呵呵,连接成功了. -f 全屏 -a 16位色 默认端口是3389(linu ...

  4. 本地 Windows 如何将 Web 工程部署到远程 Windows 主机上

    文章目录 第一步:先连接远程 Windows 主机: 第二步:连接远程 Windows 主机后,把发布包复制到远程主机上并确定有关的目录 第三步:删除远程主机的数据库中的旧数据 第四步:创建新的用户和 ...

  5. python 管理windows客户端_在远程windows客户端上执行python脚本

    我正在使用paramiko在远程windows服务器上执行命令.我能够执行dir之类的命令并提取输出,但是执行python脚本似乎失败了.不会引发错误消息.在 下面是我的代码片段:def ssh_co ...

  6. 【Ansible】Ansible控制windows插件安装及运行error与解决方法

    一. 问:因pip版本问题无法安装kerberos 答:安装提示需要先安装pip升级包 下载pip9.0.1升级包: ![1_2] 二.问:安装kerberos报错 答:需要先安装libkrb5开发包 ...

  7. 使用ansible远程管理集群

    使用ansible远程执行命令 1.ansible简介 ansible的官方定义:"Ansible is Simple IT Automation"--简单的自动化IT工具.这个工 ...

  8. 本机远程Windows服务器远程桌面不能相互复制粘贴的两种解决方案

    方案1 首先我们连接远程桌面得时候需要设置一下剪贴板,如果不设置的话不管怎么复制都是不行的 这个D盘就是自己电脑的D盘 可以在Windows系统之间相互拷贝 设置完了之后可以去试试是否可以正常复制粘贴 ...

  9. linux开启rdp服务,让windows电脑mstsc远程,linux rdesktop远程windows机器

    windows 远程 linux桌面系统 windows7, CentOS release 6.9 1.安装 yum install xrdp 2.启动服务 service xrdp start 3. ...

最新文章

  1. html 页面自适应窗口大小,JavaScript实现自适应窗口大小的网页
  2. 001_SpringMVC入门
  3. 最新进展概述:澄清式提问辅助理解信息检索中的用户意图
  4. 警告:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA(亲测)
  5. F4 value help and HANA native SQL
  6. 三、Beautiful Soup解析库
  7. 不懂别瞎搞!Redis 性能优化的 13 条军规!
  8. android ndk 编译选项,Android NDK 对于c++的支持(mk文件内编译选项)
  9. JavaScript面向对象和原型函数
  10. [转载] Python(析构函数)
  11. Android Camera数据流分析全程记录(overlay方式二)
  12. Charles使用教程(Mac)
  13. 信噪比计算方式(小问题解惑)
  14. Ubunto 16.04设置静态ip地址
  15. android 模拟器装apk,如何在Android模拟器中安装apk文件
  16. 李春葆《数据结构教程》课后习题和实验代码
  17. Google谷歌新手SEO优化教程篇【1】
  18. 三维游戏中的角色动画
  19. 2022年11月PMP难考吗?
  20. [转载]形容女人的词语

热门文章

  1. 百度pc权重查询易语言代码
  2. python 使用jieba.analyse提取句子级的关键字
  3. UnityShader 优化 GUP INSTANCE
  4. css3 keyframes 取消动画,为什么我的CSS3动画使用@keyframes在每个百分比范围内停止几毫秒?...
  5. 我的世界服务器公会系统指令,我的世界Factions 公会家族插件
  6. Android OTA 相关工具(四) 查看 payload 文件信息
  7. 初探netCDF4——ECMWF学习笔记
  8. linux基本监控命令 uc优秀
  9. PPT中如何优雅的插入花体字母
  10. 文献阅读(190)Adapt NoC