ANSIBLE的Ad-hoc和Inventory基本使用

2021-09-14 14:52:04 浏览数 (1)

一.Ansible常用模块
  1. Ping模块:测试连通性  
  2. file模块:文件管理,创建、删除文件或目录  
  3. copy模块:拷贝文件  
  4. shell: 执行shell命令  
  5. yum模块:下载应用(CentOS)  
  6. apt模块:下载应用(Ubuntu)  
  7. user模块:管理用户  
  8. Fetch模块:从远程主机拉取文件到ansible服务器  
  9. Blockinfile模块:在哪一行插入文本,可带行标签  
  10. Lineinfile模块:编辑文本,如在哪一行插入  
  11. replace模块:替换文本  
  12. service模块: 管理服务器  
二.Ansible的常用命令和常用参数

1.Ansible常用命令

  1. ansible mytest -m setup #产看指定主机server1上的facts变量信息
  2. ansible * -m setup #查看指定的所有主机上的facts变量信息
  3. ansible-doc -l #列出有哪些可用的模块,按q退出
  4. ansible-doc -l | wc -l #列出有多少个可用的模块
  5. ansible-doc -l | grep user #列出与user有关的模块
  6. ansible-doc user: #查看user模块的帮助文档,按q退出。也可以在最后一行输入/passwd,来过滤与passwd有关的内容
  7. ansible mytest -a 'df -h' #在test组执行df -h命令

2.Ansible常用参数

  1. -m:要执行的模块,默认为command  
  2. -a:指定模块的参数  
  3. -u:ssh连接的用户名,默认用root,ansible.cfg中可以配置  
  4. -b,--become:变成那个用户身份,不提示密码  
  5. -k:提示输入ssh登录密码,当使用密码验证的时候用  
  6. -s:sudo运行  
  7. -U:sudo到哪个用户,默认为root  
  8. -K:提示输入sudo密码,当不是NOPASSWD模式时使用  
  9. -C:只是测试一下会改变什么内容,不会真正去执行  
  10. -c:连接类型(default=smart)  
  11. -f:fork多少进程并发处理,默认为5个  
  12. -i:指定hosts文件路径,默认default=/etc/ansible/hosts  
  13. -I:指定pattern,对已匹配的主机中再过滤一次  
  14. -list-host:只打印有哪些主机会执行这个命令,不会实际执行  
  15. -M:要执行的模块路径,默认为/usr/share/ansible  
  16. -o:压缩输出,摘要输出  
  17. --private-key:私钥路径  
  18. -T:ssh连接超时时间,默认是10秒  
  19. -t:日志输出到该目录,日志文件名以主机命名  
  20. -v:显示详细日志  
三.Ansible Ad-hoc

1.Ad-hoc是什么?

ad-hoc简而言之,就是"临时命令"。 场景一:在多台机器上,查看某个进程是否启动。 场景二:在多台机器上,拷贝指定日志文件到本地。 它是一个命令行工具 它适用于业务变更 它适用所见即所得

2.Ad-hoc怎么用?

1)列出目标主机/root目录下所有的文件

  1. [root@localhost ~]# ansible mytest -m shell -a "ls /root" --user=root
  2. 192.168.150.121 | CHANGED | rc=0 >>  
  3. 560_file  
  4. anaconda-ks.cfg  
  5. direct_2G  
  6. initial-setup-ks.cfg  
  7. outputme.txt  
  8. pcre2-10.35  
  9. pcre2-10.35.tar.gz  
  10. 192.168.150.71 | CHANGED | rc=0 >>  
  11. 192.168.150.96  
  12. anaconda-ks.cfg  
  13. haopython2019  
  14. initial-setup-ks.cfg  
  15. jingfeng  
  16. jingfeng.zip  
  17. mydown  
  18. nginx-1.13.0  
  19. nginx-1.13.0.tar.gz  
  20. rpmbuild  
  21. www.dzcd.cn  
  22. [root@localhost ~]# 

2)目标主机需要登录密码

先登录目标主机,注释掉公钥

  1. [root@yunkzbd ~]# cat .ssh/authorized_keys 
  2. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgsqYlTmbSYY6aQuh ZeOtLzzGAMLly/EnXIYZ/KdaWg0HPyYW2i4kxiH0CERp71d69PQDDSDQd GFbFOkN5mLkJVAkuoukNk9kjwwHZJcRgnikzVd A0VORwG4Gsf8slUUsGoL8Sw6liLEyTJOWFgbaKnNVeyiZoLo8oIb6/zNPorkUHkSpUvk7dCZGbGmsXCieGCOQ04oblmJUwTmP5GokA7s3fH1qjU3X9TZMIW1084bMyAkObp6pzotSzSogJ5ciSgLufNNCCxhrBtIzijv ygVUMEpfn2PqW7HpM0sTL/TZvQlVebnUrIFSw5orDAy 79jrSQ0Z1NZlxNKacd root@haopython.com  
  3. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvM8/7ER6B0mVr7vlOxoY9xZ/GH3Ke2Bbq3yz3kPQzHuBn0RL 1RRWT5O15kETmSjQ2oYr72bRcaC7d8zj7/3X8eJ2TTgK0atzSklak/oqeL/3KBVM wuhvQJzjWgHS1bfM9dR8Fuax69S A/dc7UdddP9yfJVpQYuniYsCaDLL/VC332TnpLPwkhINC8Fab FyV00BCynwS6ErzN1/IxXimr9Xefjkz6DKylRVtTlqA2 V0N6dIorOxqg9ES3gYyPuWlHS6C7aTHfF vyTqHgqNbvQFgQ0xPPvnH7mLWjqdQbSNhDWo3Ue10PO7q1 /F4py1BWfBXtjVJI z3LR/t root@localhost.localdomain  
  4. [root@yunkzbd ~]# pwd
  5. /root  
  6. [root@yunkzbd ~]# cd .ssh
  7. [root@yunkzbd .ssh]# ll
  8. 总用量 4  
  9. -rw-------. 1 root root 808 9月  24 11:16 authorized_keys  
  10. [root@yunkzbd .ssh]# 

# ansible默认是以公钥的形式登录,如果要用密码登录,需在后面加上参数--ask-pass

  1. [root@localhost ~]# ansible mytest -m shell -a "ls /root" --user=root --ask-pass
  2. SSH password:   
  3. 192.168.150.71 | CHANGED | rc=0 >>  
  4. 192.168.150.96  
  5. anaconda-ks.cfg  
  6. haopython2019  
  7. initial-setup-ks.cfg  
  8. jingfeng  
  9. jingfeng.zip  
  10. mydown  
  11. nginx-1.13.0  
  12. nginx-1.13.0.tar.gz  
  13. 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,如下是一个简单的例子:

  1. ## [webservers]
  2. ## alpha.example.org
  3. ## beta.example.org
  4. ## 192.168.1.100
  5. ## 192.168.1.110
  6. # If you have multiple hosts following a pattern you can specify
  7. # them like this:
  8. ## www[001:006].example.com
  9. # Ex 3: A collection of database servers in the 'dbservers' group
  10. ## [dbservers]
  11. ## 
  12. ## db01.intranet.mydomain.net
  13. ## db02.intranet.mydomain.net
  14. ## 10.25.1.56
  15. ## 10.25.1.57
  16. # Here's another example of host ranges, this time there are no
  17. # leading 0s:
  18. ## db-[99:101]-node.example.com
  19. [mytest]  
  20. 192.168.150.121  
  21. 192.168.150.71  
  22. [root@localhost ~]# 

[mytest]

服务器分组的名称,指定组名。主机可以直接用ip地址,也可以用域名,还可以用数字和字母指定一批连续的服务器。

如果多台主机的管理账户各有不同的话,我们也可以在Inventory文件中处理,分割进行设置:

  1. [myweb]  
  2. 192.168.150.20 ansible_ssh_user=root  
  3. 192.168.150.21 ansible_ssh_user=moonrong  
  4. 192.168.150.22 ansible_ssh_host=192.168.150.22 ansible_ssh_port=36000  
  5. [production]  
  6. 192.168.150.20  
  7. 192.168.150.22  
  8. mydb ansible_ssh_user=work ansible_ssh_private_key_file=/home/work/.ssh/id_rsa   

上面链接参数的含义:

  1. ansible_ssh_user--->用于管理远程主机的用户名  
  2. ansible_ssh_host--->用于指定被管理主机的端口  
  3. ansible_ssh_port---->用于指定ssh连接端口  
  4. ansible_ssh_private_key_file--->指定ssh key文件  
  5. host_key_checking=False 当你第一次连接远程主机的时候,会提示yes/no,设置为False会跳过这个环节。  

0 人点赞