Ansible安装

1.01 Ansible介绍

1.02 Ansible安装

准备两台机器,前面我们做实验的两台机器cdn001,cdn002 
只需要在cdn001上安装ansible  
yum list |grep ansible 可以看到自带源里就有2.5版本的ansible  
yum install -y ansible ansible-doc
cdn001上生成密钥对 ssh-keygen -t rsa(如果已经有了 可以直接使用)   
把公钥放到cdn001和cdn002上,设置密钥认证(因为组里面有两台机器,所以需要将中控机(cdn001)的公钥 分别放到这两台机器上!)  
vi /etc/ansible/hosts //增加  
[testhost]  
127.0.0.1  
192.168.60.12 
说明: testhost为主机组名字,自定义的。 下面两个ip为组内的机器ip(也可以是主机名)。  
[root@Dasoncheng ~]# yum list |grep ansible
ansible.noarch                            2.5.0-2.el7                  epel     
ansible-doc.noarch                        2.5.0-2.el7                  epel
[root@Dasoncheng ~]# yum install -y ansible ansible-doc
[root@Dasoncheng ~]# cat /root/.ssh/id_rsa.pub    ##分别拷贝到cdn001和cdn002
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvriTymkEzNVwubKHBUbQ1aDnY+YIHJhSL5BIWBiMF72Fn4D87+lRK9pWeVH4E4MXTIFBmx8yYcwao0bWJuPFTVQbQlJKd7+RLagkVP6Ds9k1WAc9ByqqNjGwvd6iMIj3xqfvqvo6bH8mlSmQ89qvdDqovQxLlDpRpy5bhX4NG9xuW2Pn/hCpVhLhjBADObapGS/nCgXDjg5+akVRKqM6ycKcb5GKUgE/rl7FGm1czaK/tkOpGvHPx6kvx9bcHo7guxwE3Kbhg39nlU5+YyHdBJg92Pi9ehI7uwPxq8t763I0tyYDloCb/R1rn66uyKKXUP3wl/yIKKRc+BYHOeQBp root@cdn001
[root@Dason02 ~]# vim /root/.ssh/authorized_keys
[root@Dasoncheng ~]# vim .ssh/authorized_keys
[root@Dasoncheng ~]# cat /etc/hosts
……
192.168.60.12 cdn002
[root@Dasoncheng ~]# vim /etc/ansible/hosts
[testhost]
127.0.0.1
192.168.60.12
cdn002

ssh-keygen命令常识:
-b:指定密钥长度;
-f:指定用来保存密钥的文件名;
-t:指定要创建的密钥类型。

1.03 ansible远程执行命令

 ansible  testhost -m command -a 'w' 
 这样就可以批量执行命令了。这里的testhost 为主机组名,-m后边是模块名字,-a后面是命令。当然我们也可以直接写一个ip,针对某一台机器来执行命令。
 ansible 127.0.0.1 -m  command -a 'hostname'
 错误: "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
 解决: yum install -y libselinux-python
 还有一个模块就是shell同样也可以实现(远程执行shell脚本、也支持命令 还支持管道符"|"--下面有讲) 
 ansible  testhost -m shell -a 'w'
[root@Dasoncheng ~]# ansible cdn002 -m command -a 'hostname'  ##ansible后面接主机/主机名组。-m是接模块、-a是接命令
cdn002 | SUCCESS | rc=0 >>
cdn002
[root@Dasoncheng ~]# ansible 192.168.60.12,127.0.0.1 -m command -a 'w'
127.0.0.1 | SUCCESS | rc=0 >>
 17:02:44 up 21:03,  4 users,  load average: 0.08, 0.05, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
gecz     pts/0    192.168.60.1     Thu16   19:59m  0.70s  0.05s sshd: gecz [priv]
gecz     pts/1    192.168.60.1     11:08    4:51m  0.17s  0.05s sshd: gecz [priv]
gecz     pts/2    192.168.60.1     16:25    4.00s  3.03s  0.07s sshd: gecz [priv]
root     pts/5    localhost        17:02    0.00s  0.40s  0.00s w

192.168.60.12 | SUCCESS | rc=0 >>
 17:02:45 up  2:15,  3 users,  load average: 0.04, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
gecz     pts/0    192.168.60.1     Sun05    5days  0.36s  0.05s sshd: gecz [priv]
gecz     pts/1    192.168.60.1     16:25   32:37   0.18s  0.11s sshd: gecz [priv]
root     pts/2    192.168.60.11    17:02    1.00s  0.41s  0.02s w
[root@Dasoncheng ~]# ansible testhost -m command -a 'hostname'
192.168.60.12 | SUCCESS | rc=0 >>
cdn002

127.0.0.1 | SUCCESS | rc=0 >>
cdn001

1.04 Ansible拷贝文件或目录

类似于scp

 ansible cdn002 -m copy -a "src=/etc/ansible  dest=/tmp/ansibletest owner=root group=root mode=0755"
 注意:源目录会放到目标目录下面去,如果目标指定的目录不存在,它会自动创建。如果拷贝的是文件,dest指定的名字和源如果不同,并且它不是已经存在的目录,相当于拷贝过去后又重命名。但相反,如果desc是目标机器上已经存在的目录,则会直接把文件拷贝到该目录下面。
 ansible testhost -m copy -a "src=/etc/passwd dest=/tmp/123"
 这里的/tmp/123和源机器上的/etc/passwd是一致的,但如果目标机器上已经有/tmp/123目录,则会再/tmp/123目录下面建立passwd文件
[root@Dasoncheng ~]# ansible cdn002 -m copy -a 'src=/etc/ansible dest=/tmp/ansible_test owner=root group=root mode=755'
cdn002 | SUCCESS => {
    "changed": true, 
    "dest": "/tmp/ansible_test/", 
    "src": "/etc/ansible"
}
[root@Dasoncheng ~]# ansible cdn002 -m command -a 'ls /tmp/ansible_test '
cdn002 | SUCCESS | rc=0 >>
ansible
[root@Dasoncheng ~]# ansible cdn002 -m command -a 'ls /tmp/ansible_test/ansible '
cdn002 | SUCCESS | rc=0 >>
ansible.cfg
hosts
roles

猜你喜欢

转载自my.oschina.net/u/3651233/blog/1798584