ansible
Ansible 基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。
ansible安裝
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
下載阿里yum源
然後,清除yum緩存,並生成新的yum緩存元數據。
yum clean all
yum makecache fast
然後,用yum下載ansible軟件
yum -y install ansible --downloadonly --downloaddir=/ansible7
ls /ansible7
createrepo /ansible7 (必做)生成yum的repodata倉庫數據庫(metadata元數據)文件夾和文件
創建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 [email protected].$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 [email protected]
ssh-copy-id [email protected]
測試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循環就夠了。