ansible,expect

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

image.png

運行腳本

chmod  -v  +x   a.txt

. a.txt

查看公鑰和私鑰

image.png

這樣就成功了。

如需給多臺服務器發送公鑰只需寫一個for循環就夠了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章