Ansible批量自動化管理工具入門

1、虛擬機版本

一、須要利用7.5版本虛擬機 
二、7.5版注意事項:
python

【2.1】、網卡名叫ens32一樣配置文件也是ens32
【2.2】、命令:systemctl 統一管理命令,
例,systemctl stop iptables.service 關閉防火牆
【2.3】、設置開機自啓動防火牆:systemctl  enable firewalld
【2.4】、設置開機關閉防火牆(必須關閉)   :systemctl disable firewalld 
【2.5】、必    須     關     閉      :systemctl disable  NetworkManager
【2.6】、yum得配置文件所有能夠用
【2.7】、重啓虛擬機,ifup ens32 啓動網卡來獲取ip
 

2、常見的批量管理工具

生產環境Ansible管理服務器ssh登錄安全策略 
一、ansible (很是簡單,不少企業都在用) 適用於管理500臺如下的服務器,特色是一臺虛擬機管理多臺虛擬機,不須要安裝任何客戶端。利用得是ssh通道,操控要用免密鑰。
nginx

1.一、安裝ansible軟件同時會自動安裝sshpass
yum -y install epel-release
yum -y install ansible
1.二、修改ssh登陸
1.2.一、vim /etc/ssh/ssh_config 修改第35行 StrictHostKeyChecking ask改成no
1.2.二、vim /etc/ssh/sshd_config 
第17行  #Port 22   #修改ssh鏈接端口 (工做中改爲一萬以上)
第38行  #PermitRootLogin yes    #是否容許root帳號遠程登錄 (工做中必須關閉)
第43行  #PubkeyAuthentication yes   #是否開啓公鑰鏈接認證 (工做中開啓)
第47行  AuthorizedKeysFile  .ssh/authorized_keys    #公鑰文件的放置位置 
第65行  PasswordAuthentication yes  #是否開啓密碼驗證登錄 
第79行  GSSAPIAuthentication yes    #是否關閉GSSAPI認證 (工做中關閉)提升ssh解析速度
第115行  #UseDNS yes                 #是否關閉DNS反向解析 (關閉) 加快ssh得鏈接速度
1.2.三、ansible配置文件 /etc/ansible/hosts
/etc/ansible/hosts
vim /etc/ansible/hosts
[nginx]
WebA ansible_ssh_host=IP地址
WebB ansible_ssh-host=IP地址
 

3、模塊使用

 

1、ansible <被操控的主機或主機組或all> [-m 模塊名] [-a 具體命令]

 

2、/etc/ansible/hosts文件中能夠定義被管理主機,Ansible經過讀取/etc/ansible/hosts文件內定義的主機清單批量作一些操做。好比定義一個nginx組,包含一臺主機Web01,再定義一個apache組,包含另外一臺主機Web02.

[root@ansible ~]# cat /etc/ansible/hosts
[nginx]
Web01 ansible_ssh_host=192.168.200.184
Web02 ansible_ssh_host=192.168.200.185

說明: 
ansible_ssh_host:被管理主機IP 
ansible_ssh_user:被管理主機用戶名 
ansible_ssh_pass:被管理主機用戶的登錄密碼 
ansible_sudo_pass:被管理主機用戶sudo時的密碼
web

 

3、設置SSH免密碼登錄

爲了不Ansible下發指令時須要輸入被管理主機的密碼,能夠經過證書籤名達到SSH無密碼登錄。使用ssh-keygen產生一對密鑰,並經過ssh-copy-id命令來發送生成的公鑰。shell

[root@ansible ~]# ls ~/.ssh/
authorized_keys  id_rsa  id_rsa.pub
[root@ansible ~]# ssh-copy-id 192.168.200.184
[root@ansible ~]# ssh-copy-id 192.168.200.185
 

4、ansible查看幫助

[root@ansible ~]# /usr/local/python/bin/ansible-doc -l 查看總幫助 
[root@ansible ~]# /usr/local/python/bin/ansible-doc -s shell 查看shell模塊的幫助
apache

一、ping模塊:Ansible中使用ping模塊來檢測指定主機的連通性vim

【1】、Ansible中使用ping模塊來檢測指定主機的連通性
ansible Web01 -m ping
綠色表示連通的,紅色表示不通
只要作了免密鑰就能夠直接登陸用戶。ansible 被管理範圍 -m 模塊名  -a 具體命令
【2】、saltstack (複雜)適用於管理1000-40000臺服務器
【3】、puppet(超級複雜)

二、command模塊:在遠程主機執行命令,不支持管道符和重定向等複雜命令,可徹底被shell模塊替代安全

例:ansible Web01 -m command -a 'hostname -I'
查看Web01服務器的ip地址

三、shell模塊:Ansible中的shell模塊能夠在被管理主機上運行命令,並支持像管道符重定向這樣的複雜命令。bash

例1:ansible Web01 -m shell -a 'useradd yunjisuan'
在Web01上建立用戶yunjisuan
例2:ansible Web01 -m shell -a 'echo 123123 | passwd --stdin yunjisuan'
給Web01上yunjisuan用戶非交互方式設定密碼

四、cron模塊:Ansible中的cron模塊用於定義任務計劃。主要包括兩種狀態(state);服務器

【4.1】crontab時間週期: 若是不指定週期,默認是*號
minute:分鐘
hour:小時
day:日期
month:月份
weekday:週期
【4.2】crontab任務: 
job:指明運行的命令是什麼
【4.3】crontab任務描述: 必須寫
name:定時任務描述(定時任務清除的依據)
【4.4】state狀態: 添加或刪除定時任務,不寫默認是添加
present:表示添加(省略狀態時默認使用);
absent:表示移除;
【4.5】crontab任務的用戶身份: 
user:指定定時任務以哪一個用戶身份執行,若是不指定默認是root用戶

例一、添加定時任務計劃,在全部被管理的主機裏每十分鐘輸出hello字符串,定時任務描述爲test cron job
ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'

例二、刪除描述爲test cron job的定時任務
ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state=absent'

例三、給Web01服務器上的普通用戶yunjisuan添加一個定時任務
ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"   user="yunjisuan"'

五、copy模塊:Ansible中的copy模塊用於實現文件複製和批量下發文件。其中使用src來定義本地源文件路徑;使用dest定義被管理主機文件路徑;backup=yes表示備份如下對方的文件。使用content則是使用指定信息內容來生成目標文件。ssh

例一、把WebB服務器上的/tmp/test目錄複製到/root/下
ansible WebB -m copy -a ‘src=/tmp/test  dest=/root’

例二、把WebB服務器上的/tmp/test目錄備份一下在複製到/root/下
ansible WebB -m copy -a ‘src=/tmp/test  dest=/root  backup=yes’

六、script模塊:Ansible中的script模塊能夠將本地腳本複製到被管理主機的內存中並運行,不會在被管理主機中留下腳本文件。

例一、編寫一個腳本,而後經過ansible的script模塊遠程向被管理主機執行此腳本
echo 'echo "1111" >> /tmp/test' >> /tmp/test.sh
ansible WebA -m script -a '/tmp/test.sh'

七、 yum模塊:利用yum模塊安裝軟件包,雖然能被shell模塊替代 
可是用yum模塊更顯專業一些

【7.1】軟件包名: 
name:指定軟件包的名字
state狀態: 
present:安裝軟件包(默認就是這個)
absent:卸載軟件包

例一、安裝nmap軟件包
ansible all -m yum -a 'name=nmap'

例二、卸載nmap軟件包
ansible all -m yum -a 'name=nmap state=absent'

八、service模塊:利用service模塊管理服務程序,雖然能被shell模塊替代 
可是用service模塊更顯專業一些

【8.1】服務名稱: 
name:指定服務的名字
【8.2】state狀態: 
started:啓動服務
stopped:中止服務
restarted:重啓服務
reloaded:平滑重載
【8.3】enabled開機自啓動: 
true:設置開機自啓動
false:設置開啓不啓動
例一、啓動firewalld並設置開機自啓動
ansible Web01 -m service -a 'name=firewalld state=started enabled=true'

例二、關閉firewalld並設置開機不啓動
ansible Web01 -m service -a 'name=firewalld state=stopped enabled=false'

九、user模塊:用戶管理模塊。管理用戶帳號,批量建立用戶

【9.1】指定用戶名 
name:指定操做的用戶的名字
【9.2】用戶描述 
comment:指定用戶的描述信息
【9.3】createhome:是否建立家目錄
【9.4】uid:指定用戶的uid號
【9.5】groups:指定用戶的附加組(默認建立和用戶名相同的組)
【9.6】password:指定用戶的密碼
【9.7】update_password:更新用戶的密碼
【9.8】shell指定用戶的登錄方式 
/bin/bash:能登陸系統
/sbin/nologin:不能登陸系統
【9.9】home:指定用戶的家目錄路徑
【9.10】state狀態: 
present:建立用戶(默認就是這個)
absent:刪除用戶
【9.11】remove:當指定state=absent時,確認是否刪除用戶家目錄 
true
false

例一、在Web02上建立一個普通用戶yunjisuan,並設置用戶的密碼爲123123
ansible Web02 -m user -a 'name=yunjisuan comment="welcom to yunjisuan" uid=1066  password=123123 shell=/bin/bash home=/home/yunjisuan'

注:利用ansible的user模塊狀態用戶時要注意在password參數的後邊添加密文,不然不能登錄用戶 
經過Python的pip程序安裝passlib便可爲密碼加密
例二、安裝Python2的pip工具,並經過pip工具安裝Python的加密模塊來給密碼加密
yum -y install epel-release
yum -y install python2-pip
pip install passlib (python裝一個支持程序passlib)

生成密文密碼
python -c "from passlib.hash import sha512_crypt;import getpass;print sha512_crypt.encrypt(getpass.getpass())"

Password:       #輸入你想要加密的密碼
$6$rounds=656000$Tw15COd8DLh/VS94$Mcmz/8CcjBKiEl0mYHcOQQCxEA5mz66EcGH2qXVk6o.Sm7FsRS.DsDVy6ET8iI6jDa045I94slZqWFwyYnRSW1          #加密後的密碼

把加密的暗文複製到剛纔password=暗文

例二、刪除以前建立的yunjisuan用戶,並刪除它的家目錄
ansible Web02 -m user -a 'name=yunjisuan state=absent remove=true'

十、setup模塊:Ansible中使用setup模塊收集,查看被管理主機的facts(facts是Ansible採集被管理主機設備信息的一個功能)。每一個被管理主機在接收並運行管理命令以前,都會將本身的相關信息(操做系統版本,IP地址等)發送給控制主機

例一、查看全部遠程主機的facts信息
ansible all -m setup | head     (all表示全部)
相關文章
相關標籤/搜索