準備兩臺機器,前面咱們作實驗的兩臺機器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:指定要建立的密鑰類型。html
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
相似於scppython
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