首先要做好免密登录 RHCEansible虚拟机初始化配置,ansible配置和安装_无所不知的神奇海螺的博客-CSDN博客
添加主机组
[root@server ~]# vim /etc/ansible/hosts
或者
测试
[root@server ~]# ansible node1 -m command -a 'hostname' --- 引号里的是想要受控主机执行的命令
[root@server ~]# ansible web -a 'hostname'
或者
[root@server ~]# ansible web --list-hosts
或者
[root@server ~]# ansible-inventory --graph
如果要匹配自定义路径的清单文件,在命令中加个 - i + 路径
[root@servera ~]# ansible 'web:ftp' --list-hosts --- 匹配在web组或者在ftp组中的所有主机
hosts (2):
servera.openlab.com
serverb.openlab.com
[root@servera ~]# ansible 'web:mail' --list-hosts --- 匹配在web组或者在mail组中的所有主机
hosts (2):
servera.openlab.com
serverb.openlab.com
[root@servera ~]# ansible 'web:&mail' --list-hosts --- 匹配在web组和mail组中的所有主机
hosts (1):
servera.openlab.com
[root@servera ~]# ansible 'web:!mail' --list-hosts --- 匹配在web组但是不在mail组中的所有主机
[WARNING]: No hosts matched, nothing to do
hosts (0):
[root@servera ~]# ansible 'web:!mail:&dns' --list-hosts --- 匹配在web组但是不在mail组中并且在dns组中的所有主机
ansible "~(web|db).*\.example\.com" -m ping
主机清单格式(交、并、补)\>all 所有主机\> 通配符ansible "*" -m pingansible 192.168.60.* -m pingansible "web*" -m ping\> 或 : (并)属于 A 或属于 B 的元素的集合 A 并 B AUB , 也表示或者的意思ansible "websrv:appsrv" -m ping\> 与 :& (交集)属于 A 且属于 Bansible 'websrv:&appsrv' -m ping\> 非 :! (补集)属于全集 U 不属于集合 Aansible 'websrv:!dbsrv' -m ping ( 在 websrv 主但不在 dbsrv 组 )综合逻辑ansible 'websrv:dbsrv:&appsrv:!ftsrv' -m ping正则表达式ansible "~(web|db).*\.example\.com" -m ping注:. 任意单个字符"~" 开始表示正则匹配* 匹配前面的子表达式零次或多次\ 转义
题目
# ansible --> ANSIBLE_CONFIG -->./ansible.cfg--> ~/.ansible.cfg --> /etc/ansible/ansible.cfg 默认只有一个配置文件生效
案例一:ansible使用ssh连接受管主机,一般不建议用管理用户,要求通过普通用户student进行链接
[defaults]inventory = /etc/ansible/hostsremote_user = studentask_pass = True
案例二:关闭主机秘钥验证(别远程主机的秘钥验证关闭)
在管控主机中通过指定用户发起操作指令,在受管主机中通过 ssh 远程连接方式以 student 用户身份执行,并验证密码;如果 ask_pass 为 false 则可以通过 -k 或者 --ask-pass 来提示接收密码进行验证。host_key_checking = False 关闭主机秘钥验证:或者直接在控制主机的操作系统中设置环境变量, 如下所示 :$export ANSIBLE_HOST_KEY_CHECKING=False
案例三:主机免密登陆
如果不需要密码验证(忽略密码验证)则需要配置秘钥验证ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -qfor host in server{a,b};dossh-copy-id -i $hostdone
案例四:远程用户sudo提权
如果在受管主机中需要通过管理员身份运行命令则配置 sudovim /etc/sudoersstudent ALL=(ALL) NOPASSWD: ALL注:在受管主机中进行配置,建议管理 sudo 用户提权密码验证,如果没有关闭则 ask_sudo_pass = True来开启执行命令 sudo 提权密码验证;但是 ask_sudo_pass = False 那么可以空过 -K --askbecome-pass 来开启执行命令 sudo 提权密码验证
案例五:特权升级。
在受管主机中通过
sudo
提权可在
ansible
配置中进行优化,开启远程用户在受管主机中执行特权升级。
控制主机执行特权命令不需要指定
sudo
命令
[student@localhost ~]$ ansible web -a 'sudo useradd haha'[WARNING]: Consider using 'become', 'become_method', and 'become_user' ratherthan running sudoservera | CHANGED | rc=0 >>serverb | CHANGED | rc=0 >>Vim /etc/ansible/ansible.cfg[privilege_escalation]become=Truebecome_method=sudobecome_user=rootbecome_ask_pass=False[student@localhost ~]$ ansible web -a 'useradd xixi'servera | CHANGED | rc=0 >>serverb | CHANGED | rc=0 >>
ansible-doc
查找关于本地系统上安装的模块信息
==
显示模块帮助
(ansible
里
man
命令,相当于help
)
-l,--lsit 查看控制节点上可用的模块列表以及其功能的概要;列出可用模块-s , --snippet 列岀某个模块支持的动作 显示模块的 playbookansible-doc [module name] 查看指定模块的概要、选项、详细信息、以及基本用法模块文档文档网站: http://docs.ansible.com注意:帮助显示中模块维护标记由于有些模块可能处于不同的开发阶段查看模块开发状态,是在 ansible-doc 输出末尾的 METEDATA 部分中指明stableinterface: 模块的关键字稳定,将尽力确保不删除关键字或更改其含义preview :模块处于阶段预览,可能不稳定deprecated: 模块弃用removed :模块已从发行版中移除
主机联通性测试
绿色:执行成功并且不需要做出任何改变黄色:执行成功并且对目标主机做出变更红色:执行失败蓝色:显示详细过程紫色:显示警告
file
模块
ansible-doc file -s
path 参数 :必须参数,用于指定要操作的文件或目录,在之前版本的 ansible 中,使用 dest 参数或者 name 参数指定要操作的文件或目录,为了兼容之前的版本,使用 dest 或 name 也可以。state 参数 : Path=“ 路径 ” state= touch|directory|link|hard|absent此参数非常灵活,此参数对应的值需要根据情况设定,比如,当我们需要在远程主机中创建一个目录的时候,我们需要使用 path 参数指定对应的目录路径,假设,我想要在远程主机上创建 /testdir/a/b 目录,那么我则需要设置 path=/testdir/a/b ,但是,我们无法从 "/testdir/a/b" 这个路径看出 b 是一个文件还是一个目录, ansible 也同样无法单单从一个字符串就知道你要创建文件还是目录,所以,我们需要通过 state 参数进行说明src 参数 :当 state 设置为 link 或者 hard 时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过 src 参数即可指定链接源。force 参数 : 当 state=link 的时候,可配合此参数强制创建链接文件,当 force=yes 时,表示强制创建链接文件,不过强制创建链接文件分为两种情况,情况一:当你要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。情况二:当你要创建链接文件的目录中已经存在与链接文件同名的文件时,将 force 设置为 yes ,回将同名文件覆盖为链接文件,相当于删除在远程主机上执行脚本[root@centos7 ~]# ansible test -m script -a "test.sh chdir=/tmp"172.20.21.120 | SUCCESS => {"changed": true,"rc": 0,"stderr": "Shared connection to 172.20.21.120 closed.\r\n","stdout": "/tmp\r\n","stdout_lines": ["/tmp"]}[root@centos7 ~]# ansible test -m raw -a "pwd"172.20.21.120 | SUCCESS | rc=0 >>/rootShared connection to 172.20.21.120 closed. 同名文件,创建链接文件。情况三:当你要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。owner 参数 :用于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错。group 参数 :用于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错。mode 参数 :用于指定被操作文件的权限,比如,如果想要将文件权限设置为 "rw-r-x---" ,则可以使用 mode=650 进行设置,或者使用 mode=0650 ,效果也是相同的,如果你想要设置特殊权限,比如为二进制文件设置 suid ,则可以使用 mode=4700 ,很方便吧。recurse 参数 :当要操作的文件为目录,将 recurse 设置为 yes ,可以递归的修改目录中文件的属性。 -Rsetype: httpd_content_t