ansible,expect

ansible

Ansible 基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。shell

 

ansible安裝

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

image.png

運行腳本

chmod  -v  +x   a.txt

. a.txt

查看公鑰和私鑰

image.png

這樣就成功了。

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

相關文章
相關標籤/搜索