ansible 远程windows
官方文档查看: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相关推荐
- Ansible在windows的使用
Ansible在windows的使用 1.linux离线安装ansible 参考博客: ansible离线安装 相关的安装包: 链接:https://pan.baidu.com/s/1vqUSk3B_ ...
- ubuntu远程windows桌面
ubuntu远程windows桌面: applications-internet-terminal server client-computer:要远程的目标主机ip,protocol: RDPv5, ...
- linux下使用rdesktop连接远程windows
sudo apt-get install rdesktop rdesktop 124.42.120.174:1433 呵呵,连接成功了. -f 全屏 -a 16位色 默认端口是3389(linu ...
- 本地 Windows 如何将 Web 工程部署到远程 Windows 主机上
文章目录 第一步:先连接远程 Windows 主机: 第二步:连接远程 Windows 主机后,把发布包复制到远程主机上并确定有关的目录 第三步:删除远程主机的数据库中的旧数据 第四步:创建新的用户和 ...
- python 管理windows客户端_在远程windows客户端上执行python脚本
我正在使用paramiko在远程windows服务器上执行命令.我能够执行dir之类的命令并提取输出,但是执行python脚本似乎失败了.不会引发错误消息.在 下面是我的代码片段:def ssh_co ...
- 【Ansible】Ansible控制windows插件安装及运行error与解决方法
一. 问:因pip版本问题无法安装kerberos 答:安装提示需要先安装pip升级包 下载pip9.0.1升级包: ![1_2] 二.问:安装kerberos报错 答:需要先安装libkrb5开发包 ...
- 使用ansible远程管理集群
使用ansible远程执行命令 1.ansible简介 ansible的官方定义:"Ansible is Simple IT Automation"--简单的自动化IT工具.这个工 ...
- 本机远程Windows服务器远程桌面不能相互复制粘贴的两种解决方案
方案1 首先我们连接远程桌面得时候需要设置一下剪贴板,如果不设置的话不管怎么复制都是不行的 这个D盘就是自己电脑的D盘 可以在Windows系统之间相互拷贝 设置完了之后可以去试试是否可以正常复制粘贴 ...
- linux开启rdp服务,让windows电脑mstsc远程,linux rdesktop远程windows机器
windows 远程 linux桌面系统 windows7, CentOS release 6.9 1.安装 yum install xrdp 2.启动服务 service xrdp start 3. ...
最新文章
- html 页面自适应窗口大小,JavaScript实现自适应窗口大小的网页
- 001_SpringMVC入门
- 最新进展概述:澄清式提问辅助理解信息检索中的用户意图
- 警告:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA(亲测)
- F4 value help and HANA native SQL
- 三、Beautiful Soup解析库
- 不懂别瞎搞!Redis 性能优化的 13 条军规!
- android ndk 编译选项,Android NDK 对于c++的支持(mk文件内编译选项)
- JavaScript面向对象和原型函数
- [转载] Python(析构函数)
- Android Camera数据流分析全程记录(overlay方式二)
- Charles使用教程(Mac)
- 信噪比计算方式(小问题解惑)
- Ubunto 16.04设置静态ip地址
- android 模拟器装apk,如何在Android模拟器中安装apk文件
- 李春葆《数据结构教程》课后习题和实验代码
- Google谷歌新手SEO优化教程篇【1】
- 三维游戏中的角色动画
- 2022年11月PMP难考吗?
- [转载]形容女人的词语
热门文章
- 百度pc权重查询易语言代码
- python 使用jieba.analyse提取句子级的关键字
- UnityShader 优化 GUP INSTANCE
- css3 keyframes 取消动画,为什么我的CSS3动画使用@keyframes在每个百分比范围内停止几毫秒?...
- 我的世界服务器公会系统指令,我的世界Factions 公会家族插件
- Android OTA 相关工具(四) 查看 payload 文件信息
- 初探netCDF4——ECMWF学习笔记
- linux基本监控命令 uc优秀
- PPT中如何优雅的插入花体字母
- 文献阅读(190)Adapt NoC