一.Ansible常用模块
- Ping模块:测试连通性
- file模块:文件管理,创建、删除文件或目录
- copy模块:拷贝文件
- shell: 执行shell命令
- yum模块:下载应用(CentOS)
- apt模块:下载应用(Ubuntu)
- user模块:管理用户
- Fetch模块:从远程主机拉取文件到ansible服务器
- Blockinfile模块:在哪一行插入文本,可带行标签
- Lineinfile模块:编辑文本,如在哪一行插入
- replace模块:替换文本
- service模块: 管理服务器
二.Ansible的常用命令和常用参数
1.Ansible常用命令
- ansible mytest -m setup #产看指定主机server1上的facts变量信息
- ansible * -m setup #查看指定的所有主机上的facts变量信息
- ansible-doc -l #列出有哪些可用的模块,按q退出
- ansible-doc -l | wc -l #列出有多少个可用的模块
- ansible-doc -l | grep user #列出与user有关的模块
- ansible-doc user: #查看user模块的帮助文档,按q退出。也可以在最后一行输入/passwd,来过滤与passwd有关的内容
- ansible mytest -a 'df -h' #在test组执行df -h命令
2.Ansible常用参数
- -m:要执行的模块,默认为command
- -a:指定模块的参数
- -u:ssh连接的用户名,默认用root,ansible.cfg中可以配置
- -b,--become:变成那个用户身份,不提示密码
- -k:提示输入ssh登录密码,当使用密码验证的时候用
- -s:sudo运行
- -U:sudo到哪个用户,默认为root
- -K:提示输入sudo密码,当不是NOPASSWD模式时使用
- -C:只是测试一下会改变什么内容,不会真正去执行
- -c:连接类型(default=smart)
- -f:fork多少进程并发处理,默认为5个
- -i:指定hosts文件路径,默认default=/etc/ansible/hosts
- -I:指定pattern,对已匹配的主机中再过滤一次
- -list-host:只打印有哪些主机会执行这个命令,不会实际执行
- -M:要执行的模块路径,默认为/usr/share/ansible
- -o:压缩输出,摘要输出
- --private-key:私钥路径
- -T:ssh连接超时时间,默认是10秒
- -t:日志输出到该目录,日志文件名以主机命名
- -v:显示详细日志
三.Ansible Ad-hoc
1.Ad-hoc是什么?
ad-hoc简而言之,就是"临时命令"。 场景一:在多台机器上,查看某个进程是否启动。 场景二:在多台机器上,拷贝指定日志文件到本地。 它是一个命令行工具 它适用于业务变更 它适用所见即所得
2.Ad-hoc怎么用?
1)列出目标主机/root目录下所有的文件
- [root@localhost ~]# ansible mytest -m shell -a "ls /root" --user=root
- 192.168.150.121 | CHANGED | rc=0 >>
- 560_file
- anaconda-ks.cfg
- direct_2G
- initial-setup-ks.cfg
- outputme.txt
- pcre2-10.35
- pcre2-10.35.tar.gz
- 192.168.150.71 | CHANGED | rc=0 >>
- 192.168.150.96
- anaconda-ks.cfg
- haopython2019
- initial-setup-ks.cfg
- jingfeng
- jingfeng.zip
- mydown
- nginx-1.13.0
- nginx-1.13.0.tar.gz
- rpmbuild
- www.dzcd.cn
- [root@localhost ~]#
2)目标主机需要登录密码
先登录目标主机,注释掉公钥
- [root@yunkzbd ~]# cat .ssh/authorized_keys
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgsqYlTmbSYY6aQuh ZeOtLzzGAMLly/EnXIYZ/KdaWg0HPyYW2i4kxiH0CERp71d69PQDDSDQd GFbFOkN5mLkJVAkuoukNk9kjwwHZJcRgnikzVd A0VORwG4Gsf8slUUsGoL8Sw6liLEyTJOWFgbaKnNVeyiZoLo8oIb6/zNPorkUHkSpUvk7dCZGbGmsXCieGCOQ04oblmJUwTmP5GokA7s3fH1qjU3X9TZMIW1084bMyAkObp6pzotSzSogJ5ciSgLufNNCCxhrBtIzijv ygVUMEpfn2PqW7HpM0sTL/TZvQlVebnUrIFSw5orDAy 79jrSQ0Z1NZlxNKacd root@haopython.com
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvM8/7ER6B0mVr7vlOxoY9xZ/GH3Ke2Bbq3yz3kPQzHuBn0RL 1RRWT5O15kETmSjQ2oYr72bRcaC7d8zj7/3X8eJ2TTgK0atzSklak/oqeL/3KBVM wuhvQJzjWgHS1bfM9dR8Fuax69S A/dc7UdddP9yfJVpQYuniYsCaDLL/VC332TnpLPwkhINC8Fab FyV00BCynwS6ErzN1/IxXimr9Xefjkz6DKylRVtTlqA2 V0N6dIorOxqg9ES3gYyPuWlHS6C7aTHfF vyTqHgqNbvQFgQ0xPPvnH7mLWjqdQbSNhDWo3Ue10PO7q1 /F4py1BWfBXtjVJI z3LR/t root@localhost.localdomain
- [root@yunkzbd ~]# pwd
- /root
- [root@yunkzbd ~]# cd .ssh
- [root@yunkzbd .ssh]# ll
- 总用量 4
- -rw-------. 1 root root 808 9月 24 11:16 authorized_keys
- [root@yunkzbd .ssh]#
# ansible默认是以公钥的形式登录,如果要用密码登录,需在后面加上参数--ask-pass
- [root@localhost ~]# ansible mytest -m shell -a "ls /root" --user=root --ask-pass
- SSH password:
- 192.168.150.71 | CHANGED | rc=0 >>
- 192.168.150.96
- anaconda-ks.cfg
- haopython2019
- initial-setup-ks.cfg
- jingfeng
- jingfeng.zip
- mydown
- nginx-1.13.0
- nginx-1.13.0.tar.gz
- rpmbuild
四.Ansible Inventory
1.Inventory是什么?
定义主机关系的文件 默认路径为/etc/ansible/hosts inventory,也就是主机清单。在大规模的配置管理工作中,特别是云服务提供商或者IDC厂家,需要管理不同业务的不同机器,这些机器的信息都存放在Ansible的inventory组件里面。在我们使用Ansible进行远程主机管理时,必须先将主机信息存放在inventory里面,这样才能使用Ansible对它进行操作。默认情况下,Ansible的inventory是一个静态的INI格式的文件。
2.Ansible Inventory详解
Inventory文件用来定义你想控制管理的服务器,默认配置文件是/etc/ansible/hosts,如下是一个简单的例子:
- ## [webservers]
- ## alpha.example.org
- ## beta.example.org
- ## 192.168.1.100
- ## 192.168.1.110
- # If you have multiple hosts following a pattern you can specify
- # them like this:
- ## www[001:006].example.com
- # Ex 3: A collection of database servers in the 'dbservers' group
- ## [dbservers]
- ##
- ## db01.intranet.mydomain.net
- ## db02.intranet.mydomain.net
- ## 10.25.1.56
- ## 10.25.1.57
- # Here's another example of host ranges, this time there are no
- # leading 0s:
- ## db-[99:101]-node.example.com
- [mytest]
- 192.168.150.121
- 192.168.150.71
- [root@localhost ~]#
[mytest]
服务器分组的名称,指定组名。主机可以直接用ip地址,也可以用域名,还可以用数字和字母指定一批连续的服务器。
如果多台主机的管理账户各有不同的话,我们也可以在Inventory文件中处理,分割进行设置:
- [myweb]
- 192.168.150.20 ansible_ssh_user=root
- 192.168.150.21 ansible_ssh_user=moonrong
- 192.168.150.22 ansible_ssh_host=192.168.150.22 ansible_ssh_port=36000
- [production]
- 192.168.150.20
- 192.168.150.22
- mydb ansible_ssh_user=work ansible_ssh_private_key_file=/home/work/.ssh/id_rsa
上面链接参数的含义:
- ansible_ssh_user--->用于管理远程主机的用户名
- ansible_ssh_host--->用于指定被管理主机的端口
- ansible_ssh_port---->用于指定ssh连接端口
- ansible_ssh_private_key_file--->指定ssh key文件
- host_key_checking=False 当你第一次连接远程主机的时候,会提示yes/no,设置为False会跳过这个环节。