yum install ansible -y
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
採用2臺主機作測試環境nginx
主控制端 | 192.168.152.129 |
被控制端 | 192.168.152.130 |
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N "" -q ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.152.130
expect工具實現非交互式的ssh-copy-id,避免每次都詢問登錄主機的用戶和密碼web
同時也可使用,ansible自帶的批量添加祕鑰模塊,批量的分發到控制端節點,authorized_key模塊便可完成,詳見介紹經常使用的ansible的模塊。正則表達式
# 安裝expect [root@server1 ~]# yum -y install expect # expect腳本 [root@server1 ~]# cat auto_sshcopyid.expect #!/usr/bin/expect set timeout 10 set user_hostname [lindex $argv 0] set password [lindex $argv 1] spawn ssh-copy-id $user_hostname expect { "(yes/no)?" { send "yes\n" expect "*password: " { send "$password\n" } } "*password: " { send "$password\n" } } expect eof # 批量調用expect的shell腳本 [root@server1 ~]# cat sshkey.sh #!/bin/bash ip=`echo -n "$(seq -s "," 131 134),150" | xargs -d "," -i echo 192.168.152.{}` password="123456" #user_host=`awk '{print $3}' /root/.ssh/id_rsa.pub` for i in $ip;do /root/auto_sshcopyid.expect root@$i $password &>>/tmp/a.log ssh root@$i "echo $i sure " done # 執行shell腳本配置互信 [root@server1 ~]# chmod +x /root/{sshkey.sh,auto_sshcopyid.expect} [root@server1 ~]# ./sshkey.sh
/etc/ansible/ansible.cfg #主配置文件,配置ansible工做特性 /etc/ansible/hosts #主機清單文件 /etc/ansible/rules #角色目錄 /etc/ansible/ansible.cfg 配置文件簡單介紹: [defaults] # some basic default values... #inventory = /etc/ansible/hosts #host的主機清單 #library = /usr/share/my_modules/ #模塊目錄 #module_utils = /usr/share/my_module_utils/ #模塊目錄 #remote_tmp = ~/.ansible/tmp # tmp遠端臨時存放的目錄 ,命令執行完目錄下生成的腳本刪除 #local_tmp = ~/.ansible/tmp #主控端執行命令的時候,把命令腳本存放,發送到被控制端的零時存放,執行完刪除 #forks = 5 #指定進程爲5 #poll_interval = 15 #拉取數據間隔時間 #sudo_user = root #主控端執行命令的時候非root身份,須要切換以什麼用戶身份執行命令 #ask_sudo_pass = True #ask_pass = True #transport = smart #remote_port = 22 #默認端口號 #module_lang = C #module_set_locale = False #### #host_key_checking = False #檢查對應服務器的host_key ,建議取消註釋(不檢查第一次鏈接主機的時候 輸入yes) #log_path=/var/log/ansible.log #日誌文件存放路徑 #roles_path = /etc/ansible/roles:/usr/share/ansible/roles #roles相關
程序文件: /usr/bin/ansible #主程序,臨時命令執行工具 /usr/bin/ansible-doc #查看配置文檔,模塊功能查看工具 -a #列出全部模塊的文檔 -l,--list #列出能夠用的模塊 -s,--snippet #顯示指定模塊的playbook片斷(顯示簡單的使用方法) /usr/bin/ansible-galaxy #下載/上傳優秀代碼或Roles模塊的官網平臺 /usr/bin/ansible-playbook #定製自動化任務,編排劇本工具/usr/bin/ansible-pull 遠程執行命令的工具: /usr/bin/ansible-vault #文件加密工具 /usr/bin/ansible-console #基於Console界面與用戶交互的執行工具
功能:經過ssh實現配置管理、應用部署、任務執行等功能shell
語法: ansible <host-pattern> [options] ansible <host-pattern> [-m module_name] [-a args] ansible 主機清單 -m 模塊 -a 模塊參數(命令) [-o單行顯示] 經常使用選項: -m :模塊 -a :模塊選項 -o :結果單行顯示 -u :主機的用戶名 -k :密碼詢問方式 -i :自定義主機清單文件 –version 顯示版本ansible的版本號 -v 詳細過程 –vv -vvv更詳細 –list-hosts 顯示主機列表,可簡寫--list
-k, –ask-pass 沒有作密碼密鑰認證的時候,須要加,提示鏈接密碼,默認Key驗證 -K, –ask-become-pass 遠端執行命令的時候是以誰的用戶身份執行,要輸入誰的密碼 -C, –check 檢查,並不執行 -T, –timeout=TIMEOUT 執行命令的超時時間,默認10s -u, –user=REMOTE_USER 遠端執行命令的時候是以誰的用戶身份執行, -b, –become 代替舊版的sudo 切換 root時候或者其餘用戶的時候使用 -B, 異步運行,並在多少秒後,超時就中止運行 例如 -B 200 ;默認是同步,保持長鏈接,等待讓全部任務完成返回結果。 -P, 異步運行間隔時間 默認15秒 -t, 執行及結果輸出到目錄,目錄名爲host的主機名做爲目錄名,也可作重定向使用 --syntax-check, 檢查playbook的語法,不執行語句內容
支持正則表達式: * 支持通配符 示例: ansible 「*」 -m ping ansible 192.168.152.* -m ping ansible 「*srvs」 -m ping 與:交集關係
示例: ansible 「web:&db」 -m ping 或: 示例: ansible 「websrvs:dbsrvs」 -m ping ansible 「192.168.152.130:192.168.152.131」 -m ping 非: ansible ‘websrvs:!dbsrvs’ -m ping 在websrvs組,但不在dbsrvs組中的主機 正則表達式: ansible 「~(web|db).*\.liych\.com」 -m ping
用於定義ansible要管理的主機列表,能夠定義單個主機和主機組,一般用於定義要管理主機的認證信息,例如ssh登陸用戶名,密碼等相關,主機配置文件在/etc/ansible/hosts就是默認的inventory。apache
使用是須要定義主機清單,inventory經常使用的定義規則以下:bash
cat -n /etc/ansible/hosts 1)定義主機組方式 [webservers] #一個組名 192.168.152.131 #組內主機 192.168.152.132 2)批量定義主機 [webservers] 192.168.152.[131:134] #【能夠指定範圍】 通常爲順序可連表明着.131,132,133,134 3)域名批量定製 [websrvs] www[01:100].example.com #同上 [dbsrvs] db-[a:f].example.com #同上 4)內置參數:用戶名和密碼,ssh端口;命令行不用輸入-u和-k選項 在主機清單內設置密碼可見 [webservers] 192.168.152.[131:132] ansible_ssh_user='root' ansible_ssh_pass='123456' ansible_ssh_port='22' ansible_ssh_user #當前主機的用戶 ansible_ssh_pass #當前主機的密碼 5)vars變量 :定義主機的內置參數 webservers] 192.168.152.[131:132] [webservers:vars] #能夠設置一組,生效於多個主機 ansible_ssh_user='root' ansible_ssh_pass='123456' ansible_ssh_port='22' 6)子組分類變量:children [nginx] 192.168.152.131 [apache] 192.168.152.132 [webservers:children] apache nginx [webservers:vars] ansible_ssh_user='root' ansible_ssh_pass='123456' ansible_ssh_port='22' #以上表示定義2個組,而後把2個小組加到一個大組內(webservers) ,同時爲大組內的小組創建通用的通訊帳戶信息。
簡單命令執行,驗證是能夠通訊使用的。服務器
ping測試使用:ssh
建立目錄文件:異步
1. 首先讀主配置文件並加載 默認/etc/ansible/ansible.cfg工具
2.獲取主機列表加載本身對應的模塊文件,如command等
3.經過ansible將模塊或命令生成對應的臨時py文件,並將該文件傳輸至遠程服務器的對應執行用戶$HOME/.ansible/tmp/ansible-tmp-數字/XXX.PY文件
4.給該文件傳輸至遠程服務器文件+x執行權限
5.主控制端執行並返回結果,輸出到屏幕
6.刪除臨時遠端的py臨時文件,sleep 0退出
綠色:執行成功
黃色:執行成功而且對目標主機作過修改,例如建立文件後,在同目錄下建立目錄的話,返回黃色,如上圖。
紅色:執行失敗
紫色:提示警告
下篇文章預告:介紹經常使用的ansible的模塊。