一、ansible介绍
不需要安装客户端,通过sshd去通信
基于模块工作,模块可以由任何语言开发
不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读。
安装十分简单,centos上可直接yum安装
有提供UI(web界面)www.ansible.com/tower,收费的。
官方文档 http://docs.ansible.com/ansible/latest/index.html
ansible已经被redhat公司收购,它在github上是一个非常受欢迎的开源软件,github地址https://github.com/ansible/ansible
一本不错的入门电子书 https://ansible-book.gitbooks.io/ansible-first-book/
二、ansible安装
准备两台机器,前面我们做实验的两台机器fuxi01,yw02
只需要在fuxi01上安装ansible
# yum list |grep ansible 可以看到自带源里就有2.8版本的ansible # yum install -y ansible ansible-doc
fuxi01上生成密钥对 ssh-keygen -t rsa
[root@fuxi01 ~]# ls /root/.ssh/ 看是否有id_rsa和id_rsa.pub,有就不用再生成,指定类型为rsa的类型。 authorized_keys id_rsa id_rsa.pub known_hosts
把公钥id_rsa.pub放到yw02和本机上,设置密钥认证
[root@yw02 ~]# vi .ssh/authorized_keys [root@fuxi01 ~]# vi .ssh/authorized_keys
回到第一台机器试试看能不能连接了
[root@fuxi01 ~]# ssh yw02 [root@fuxi01 ~]# ssh 127.0.0.1
配置/etc/ansible/hosts,目的是为了配置主机组的。
管理机器可以分成多个组,每一组里都有若干个机器,后续就可以针对主机组进行操作。
//增加,可以写主机名,也可以写IP地址。主机名要想被识别,需要先在/etc/hosts中配置。
# vi /etc/ansible/hosts [testhost] 127.0.0.1 yw02
说明: testhost为主机组名字,自定义的。 下面两个ip为组内的机器IP。
三、ansible远程执行命令
# ansible testhost -m command -a 'w'
这样就可以批量执行命令了。这里的testhost 为主机组名,-m指定模块(module),-a后面指定命令。也可以直接写一个ip,针对某一台机器来执行命令。
# ansible 127.0.0.1 -m command -a 'hostname' # ansible yw02 -m command -a 'hostname'
当出现此错误: "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
解决方法: yum install -y libselinux-python
还有一个模块shell同样也可以实现
# ansible testhost -m shell -a 'w'
模块:
command:执行命令
shell:执行脚本
四、ansible拷贝文件和目录
# ansible yw02 -m copy -a "src=/etc/ansible dest=/tmp/ansible_test owner=root group=root mode=0755"
copy:拷贝模块,可以用来拷贝文件或目录。
src:指定来源文件或目录
dest:指定目标文件或目录
owner:指定目标的属主
group:指定目标的属组
mode:指定权限
注意:源目录会放到目标目录下面去,如果目标指定的目录不存在,它会自动创建。如果拷贝的是文件,dest指定的名字和源如果不同,并且它不是已经存在的目录,相当于拷贝过去后又重命名。但相反,如果desc是目标机器上已经存在的目录,则会直接把文件拷贝到该目录下面。
# ansible testhost -m copy -a "src=/etc/passwd dest=/tmp/123"
这里的/tmp/123和源机器上的/etc/passwd是一致的,但如果目标机器上已经有/tmp/123目录,则会在/tmp/123目录下面建立passwd文件。
五、ansible远程执行脚本
首先创建一个shell脚本
# vim /tmp/1.sh //加入内容 #!/bin/bash echo `date` > /tmp/ansible_test.txt
然后把该脚本分发到各个机器上
# ansible testhost -m copy -a "src=/tmp/1.sh dest=/tmp/test.sh mode=0755"
最后是批量执行该shell脚本
# ansible testhost -m shell -a "/tmp/test.sh"
shell模块,还支持远程执行命令并且带管道。command模块是不支持的。
# ansible testhost -m shell -a "cat /etc/passwd|wc -l "
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。