ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架html
a. ansible是一個基於Python開發的自動化運維工具
b. ansible是一個基於ssh協議實現遠程管理的工具
c. ansible軟件能夠實現多種批量管理操做(批量系統配置、批量軟件部署、批量文件拷貝、批量運行命令)python
借下別處的一張圖哈:linux
ansible軟件服務端(管理端):不須要啓動任何服務 默認服務端不須要任何的配置web
ansible軟件客戶端(受控端):沒有客戶端軟件安裝shell
介紹中也說了ansible是基於ssh傳輸的,那麼部署ansible前提就要配置好ssh祕鑰鏈接,並且要免交互式的。vim
下面就來介紹下如何進行ssh祕鑰鏈接:安全
ssh-keygen -t dsa <-- 建立密鑰對命令 -t dsa表示指定密鑰對加密類型
祕鑰保存默認路徑爲 /home/.ssh/bash
執行一條命令:服務器
[root@m01 .ssh]# ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31 #此處爲被管理主機地址
此時被管理主機就會自動生成authorized_keys文件來保存公鑰信息:網絡
此時管理端直接就能夠遠程鏈接了 (可是第一次仍是須要手動輸入yes,須要交互)
提一嘴:ssh 172.16.1.31 uptime <-- 能夠不用登錄到遠程主機,就能夠直接查看遠程主機信息
Port 52113 <- 修改ssh服務端口號信息 ListenAddress 0.0.0.0 <- 主要做用提高網絡鏈接安全性 PS:監聽地址只能配置爲服務器網卡上擁有的地址 PermitRootLogin no <- 是否容許root用戶遠程登陸 PermitEmptyPasswords no <- 是否容許空密碼 UseDNS no <- 是否進行DNS反向解析(提高ssh遠程鏈接效率) GSSAPIAuthentication no <- 是否進行遠程GSSAPI認證(提高ssh遠程鏈接效率)
照上面的方法進行操做一遍就會 以爲哇ssh祕鑰鏈接好簡單啊,可是細心的小夥伴就會發現,無論是建立密鑰對仍是進行ssh鏈接,第一次都須要手動輸入yes 和回車啊,有小夥伴就會說,沒事啊
就我就手動敲敲就好了啊。嗯...........沒錯你一兩臺均可以手動敲下不礙事,可是咱們企業實際生產環境須要管理的服務器中每每都是上百臺 可能還會更多。那你咋辦乾瞪眼麼.......................................
好啦 下面就讓咱們介紹下如何免交互吧:
1)首先要免交互式的建立密鑰對
ssh-keygen -t dsa 影響免交互建立密鑰對建立因素: 1)須要指定私鑰存放路徑 -f /root/.ssh/id_dsa 2)須要進行私鑰文件密碼設定 -N/-P -N ""/-P ""
免交互建立密鑰對方法:
ssh-keygen -t dsa -f /root/.ssh/id_dsa -N "" # 通常咱們不設文件密碼啦
公鑰分發:
執行sshpass 命令
-p參數:被管理端主機用戶登陸密碼
-o StrictHostKeyChecking=no :須要有確認鏈接過程,須要輸入yes/no
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.31" #直接這樣就OK了
批量分發公鑰:
寫個lowB腳本吧
#!/bin/bash ##########ssh祕鑰鏈接########## ips=(41 31 7) #定義須要管理的主機地址,ip建議寫在文件裏 循環讀取就ok了 rm -f /root/.ssh/id_dsa* ssh-keygen -t dsa -f /root/.ssh/id_dsa -N "" for ip in ${ips[@]} do sshpass -p123321 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip" done
最後給腳本添加個執行權限 chmod +x 就能夠快了的玩耍啦!!!!!
前戲終於完啦哈 ,進入今天的主角啦!!
這個就超級簡單啦,直接yum安裝
yum install -y ansible
ansible是沒有客戶端的,可是呢有爲了防止selinux的干擾咱們仍是要安裝下 libselinux-python這個包
直接在受控主機上上安裝:
yum install -y libselinux-python
vim /etc/ansible/hosts
[自定義模塊名]
172.16.1.7 ##添加受控主機的ip
172.16.1.31
172.16.1.41
能夠根據本身的業務分別自定義模塊
測試一下:
ansible web -m command -a "hostname"
沒問題啦!!
模塊比較多哈 這裏只簡單的介紹下幾個經常使用的模塊,學習ansible必定要本身去看官方文檔哈!!
官網地址:https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
ansible模塊執行語法:
ansible 管理主機信息或者主機組信息 -m 模塊名稱 -a 相關模塊參數
主機信息:遠程主機IP地址 遠程主機組名稱 遠程全部主機all
-m 指定相應模塊
-a 利用模塊中某些參數功能
參數:chdir---在執行某個命令前,先切換目錄
參數:creates---判斷一個文件是否存在,若是已經存在了,後面的命令就不會執行
參數:removes---判斷一個文件是否存在,若是不存在,後面的命令就不會執行
參數:chdir---在執行莫個命令前,先切換目錄 參數:creates---判斷一個文件是否存在,若是已經存在了,後面的命令就不會執行 參數:removes---判斷一個文件是否存在,若是不存在,後面的命令就不會執行 參數(必需要有的):free_form---表示執行command模塊時,必需要有linux合法命令信息
說明:shell模塊能夠知足command模塊全部功能,而且能夠支持識別特殊字符信息 < > | ;
參數:backup---將管理主機上數據信息進行遠程備份
參數:src---定義要推送數據信息
參數:dest---定義將數據推送到遠程主機什麼目錄中
參數:owner---設置複製後的文件屬主權限
參數:group---設置複製後的文件屬組權限
參數:mode---設置複製後的文件權限(600 755)
參數:owner---設置複製後的文件屬主權限 參數:group---設置複製後的文件屬組權限 參數:mode---設置複製後的文件權限(600 755)
參數:state---用於指定建立目錄或文件
=touch #建立文件
=directory
name:執行要安裝軟件的名稱,以及軟件的版本
state:installed安裝 absent(卸載)
[root@m01 ~]# ansible backup -m yum -a "name=iftop state=installed" [root@m01 ~]# ansible backup -m yum -a "name=iftop state=absent"
參數:
name: 指定要管理的服務名稱(管理的服務必定在chkconfig中能夠看到)
state:stopped started restarted reloaded
enabled:yes表示服務開機自啓動 no表示服務開機不要自動啓動
ansible 172.16.1.41 -m service -a "name=crond state=started enabled=yes"
* * * * * /bin/sh /server/scripts/test.sh &>/dev/null minute=0-59 * */n , - hour day month weekday job='/bin/sh /server/scripts/test.sh &>/dev/null'
添加定時任務:
ansible 172.16.1.41 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'" ansible 172.16.1.41 -m cron -a "name=test minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
刪除定時任務:
ansible 172.16.1.41 -m cron -a "name=oldboy02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' state=absent" ansible 172.16.1.41 -m cron -a "name=oldboy01 state=absent"
註釋定時任務:
ansible 172.16.1.41 -m cron -a "name=oldboy01 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=yes" ansible 172.16.1.41 -m cron -a "name=oldboy01 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=no"
綠色:查看遠程主機信息,不會對遠程主機系統作任何修改
紅色:執行操做出現異常錯誤
黃色:對遠程主機系統進行修改操做
粉色:警告或者忠告信息
官方文檔:https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
遵循pyyaml原則
①. - 用法說明,表示列表顯示的內容 水果信息: - 蘋果 - 香蕉 - 西瓜 ②. : 用法說明: 姓名: 張三 性別: 男 人員信息: - 運維人員: sa - 開發人員: dev - 存儲人員: dba ③. 空格 用法說明: 對內容進行分級時,須要有兩個空格表示分級 軟件安裝步驟: - 服務端安裝步驟: 第一個里程碑: 檢查軟件是否安裝 第二個里程碑: 編寫配置文件內容 - 客戶端安裝步驟: 補充:必須使用空格分隔ansible劇本級別,必定不要使用tab鍵進行分割
ansible-playbook /etc/ansible/ansible-playbook/test.yaml
ansible-playbook -C /etc/ansible/ansible-playbook/test.yaml