Ansible 基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。shell
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo數據庫
下載阿里yum源vim
而後,清除yum緩存,並生成新的yum緩存元數據。緩存
yum clean all服務器
yum makecache fast網絡
而後,用yum下載ansible軟件多線程
yum -y install ansible --downloadonly --downloaddir=/ansible7框架
ls /ansible7運維
createrepo /ansible7 (必作)生成yum的repodata倉庫數據庫(metadata元數據)文件夾和文件ssh
建立ansible7的yum配置文件
vim /etc/yum.repo.d/ansible7.repo
[ansible7]
name=asible 7
baseurl=file:///ansible7
enable=1
gpgcheck=0
刪除網絡yum源配置文件
cd /etc/yum.repo.d
rm -rfv C*.repo epel.repo
yum clean all
yum repolist
yum search ansible
yum -y install ansible
http://mirrors.aliyun.com/repo/epel-7.repo
for i in {1..5}
do
(ssh root@192.168.11.$i ‘yum -y install vsftpd ftp lftp’)& 多線程
done
安裝ansible軟件
先下載ansible包
yum -y install ansible
rpm -qc ansible
vim /etc/ansible/hosts 在最後添加以下內容
[qf]
192.168.11.11
192.168.11.12
生成祕鑰對,並上傳公鑰給要管理的主機
ssh-keygen
ssh-copy-id root@192.168.11.11
ssh-copy-id root@192.168.11.12
測試ansible的使用
語法:ansible 主機名或ip -m 模塊名 -a ‘模塊的選項和參數’
ansible選項:
-m 指定模塊,常見的模塊有ping ,shell,command,cron,user,group,yum等
-a 指定模塊的選項參數,參數中state狀態有present(如今就有,用於建立)、absent(缺席的,用於刪除)兩種
eg:ansible 192.168.11.12 -m shell -a ‘ip a’
用ansible給qf主機組中的全部主機新增jack用戶。而後刪除jack用戶。
ansible qf -m user -a 「name=’jack’ shell=’/sbin/nologin’ state=’present’」
ansible qf -m shell -a ‘id jack;tail -5 /etc/passwd’
新增jack用戶
ansible qf -m user -a 「name=’jack’ remove=yes state=’absent’」
ansible qf -m shell -a ‘id jack;tail -5 /etc/passwd’
setup:查看遠程主機的基本信息 例:ansible qf -m setup
ping: ansible qf -m ping 測試遠程主機的運行狀態
file: ansible qf -m file -a 「path=’/aa/bb’ state=’directory’」設置文件屬性
force:須要在兩種狀況下強制建立軟連接,一種是源文件不存在,但以後會創建的狀況下;另外一種是目標軟連接已存在,須要先取消以前的連接,而後創造新的軟連接,有2個選項:yes|no
group:定義文件/目錄的屬組
mode:定義文件/目錄的權限
owner:定義文件/目錄的屬主
path:必選項,定義文件/目錄的路徑
recurse:遞歸設置文件的屬性,只對目錄有效,有兩個選項:yes|no
src:被連接的源文件路徑,只應用於state=link的狀況
state:
directory:若是目錄不存在,就建立目錄
file:即便文件不存在,也不會被建立
link:建立軟連接
hard:建立硬連接
touch:若是文件不存在,則會建立一個新的文件,若是文件或目錄已存在,則更新其最後修改時間
absent:刪除文件
expect
shell腳本須要交互式的地方,有些命令須要手動去交互如passwd scp
對自動部署免去用戶交互的痛苦,expect能很好的解決這類問題
expect 把交互式操做變成非交互式
expect的核心spawn expect send set
spawn 調用要執行的命令
expect 等待命令提示信息的出現,也就是捕捉用戶輸入的提示
send 發送須要交互的值,代替了用戶手動輸入的內容
set 設置變量值
set timeout 300 300秒超時 若是300秒沒有expect內容出現就退出
設置expect永不超時
set timeout -1
interact 執行完成後保持交互狀態。若是沒有這一句登錄完成後會退出
expect eof 這個必定要加,與spawn對應表示捕獲終端輸出信息終止,相似於if ...then ...fi
expect腳本必須以interact或expect eof結束,執行自動化任務一般expect eof就夠了。
expect使用實例:
1.首先確認expect的包是否安裝
#rpm -qa | grep expect
#yum install -y expect
2.安裝完成後查看expect的路徑,能夠用
which expect
/usr/bin/expect
例:製做祕鑰並將公鑰發給ssh服務器192.168.11.12,其密碼是0
vim a.txt
運行腳本
chmod -v +x a.txt
. a.txt
查看公鑰和私鑰
這樣就成功了。
如需給多臺服務器發送公鑰只需寫一個for循環就夠了。