Ansible批量自動化管理工具入門
一、虛擬機版本
1、需要利用7.5版本虛擬機
2、7.5版註意事項:
【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
二、常見的批量管理工具
生產環境Ansible管理服務器ssh登陸安全策略
1、ansible (非常簡單,很多企業都在用) 適用於管理500臺以下的服務器,特點是一臺虛擬機管理多臺虛擬機,不需要安裝任何客戶端。利用得是ssh通道,操控要用免密鑰。
1.1、安裝ansible軟件同時會自動安裝sshpass yum -y install epel-release yum -y install ansible 1.2、修改ssh登錄 1.2.1、vim /etc/ssh/ssh_config 修改第35行 StrictHostKeyChecking ask改為no 1.2.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.3、ansible配置文件 /etc/ansible/hosts /etc/ansible/hosts vim /etc/ansible/hosts [nginx] WebA ansible_ssh_host=IP地址 WebB ansible_ssh-host=IP地址
三、模塊使用
一、ansible <被操控的主機或主機組或all> [-m 模塊名] [-a 具體命令]
二、/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時的密碼
三、設置SSH免密碼登陸
為了避免Ansible下發指令時需要輸入被管理主機的密碼,可以通過證書簽名達到SSH無密碼登陸。使用ssh-keygen產生一對密鑰,並通過ssh-copy-id命令來發送生成的公鑰。
[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
四、ansible查看幫助
[root@ansible ~]# /usr/local/python/bin/ansible-doc -l
查看總幫助 [root@ansible ~]# /usr/local/python/bin/ansible-doc -s shell
查看shell模塊的幫助
1、ping模塊:Ansible中使用ping模塊來檢測指定主機的連通性
【1】、Ansible中使用ping模塊來檢測指定主機的連通性
ansible Web01 -m ping
綠色表示連通的,紅色表示不通
只要做了免密鑰就可以直接登錄用戶。ansible 被管理範圍 -m 模塊名 -a 具體命令
【2】、saltstack (復雜)適用於管理1000-40000臺服務器
【3】、puppet(超級復雜)
2、command模塊:在遠程主機執行命令,不支持管道符和重定向等復雜命令,可完全被shell模塊替代
例:ansible Web01 -m command -a ‘hostname -I‘
查看Web01服務器的ip地址
3、shell模塊:Ansible中的shell模塊可以在被管理主機上運行命令,並支持像管道符重定向這樣的復雜命令。
例1:ansible Web01 -m shell -a ‘useradd yunjisuan‘
在Web01上創建用戶yunjisuan
例2:ansible Web01 -m shell -a ‘echo 123123 | passwd --stdin yunjisuan‘
給Web01上yunjisuan用戶非交互方式設定密碼
4、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用戶
例1、添加定時任務計劃,在所有被管理的主機裏每十分鐘輸出hello字符串,定時任務描述為test cron job
ansible all -m cron -a ‘minute="*/10" job="/bin/echo hello" name="test cron job"‘
例2、刪除描述為test cron job的定時任務
ansible all -m cron -a ‘minute="*/10" job="/bin/echo hello" name="test cron job" state=absent‘
例3、給Web01服務器上的普通用戶yunjisuan添加一個定時任務
ansible all -m cron -a ‘minute="*/10" job="/bin/echo hello" name="test cron job" user="yunjisuan"‘
5、copy模塊:Ansible中的copy模塊用於實現文件復制和批量下發文件。其中使用src來定義本地源文件路徑;使用dest定義被管理主機文件路徑;backup=yes表示備份以下對方的文件。使用content則是使用指定信息內容來生成目標文件。
例1、把WebB服務器上的/tmp/test目錄復制到/root/下
ansible WebB -m copy -a ‘src=/tmp/test dest=/root’
例2、把WebB服務器上的/tmp/test目錄備份一下在復制到/root/下
ansible WebB -m copy -a ‘src=/tmp/test dest=/root backup=yes’
6、script模塊:Ansible中的script模塊可以將本地腳本復制到被管理主機的內存中並運行,不會在被管理主機中留下腳本文件。
例1、編寫一個腳本,然後通過ansible的script模塊遠程向被管理主機執行此腳本
echo ‘echo "1111" >> /tmp/test‘ >> /tmp/test.sh
ansible WebA -m script -a ‘/tmp/test.sh‘
7、 yum模塊:利用yum模塊安裝軟件包,雖然能被shell模塊替代
但是用yum模塊更顯專業一些
【7.1】軟件包名:
name:指定軟件包的名字
state狀態:
present:安裝軟件包(默認就是這個)
absent:卸載軟件包
例1、安裝nmap軟件包
ansible all -m yum -a ‘name=nmap‘
例2、卸載nmap軟件包
ansible all -m yum -a ‘name=nmap state=absent‘
8、service模塊:利用service模塊管理服務程序,雖然能被shell模塊替代
但是用service模塊更顯專業一些
【8.1】服務名稱:
name:指定服務的名字
【8.2】state狀態:
started:啟動服務
stopped:停止服務
restarted:重啟服務
reloaded:平滑重載
【8.3】enabled開機自啟動:
true:設置開機自啟動
false:設置開啟不啟動
例1、啟動firewalld並設置開機自啟動
ansible Web01 -m service -a ‘name=firewalld state=started enabled=true‘
例2、關閉firewalld並設置開機不啟動
ansible Web01 -m service -a ‘name=firewalld state=stopped enabled=false‘
9、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
例1、在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即可為密碼加密
例2、安裝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=暗文
例2、刪除之前創建的yunjisuan用戶,並刪除它的家目錄
ansible Web02 -m user -a ‘name=yunjisuan state=absent remove=true‘
10、setup模塊:Ansible中使用setup模塊收集,查看被管理主機的facts(facts是Ansible采集被管理主機設備信息的一個功能)。每個被管理主機在接收並運行管理命令之前,都會將自己的相關信息(操作系統版本,IP地址等)發送給控制主機
例1、查看所有遠程主機的facts信息
ansible all -m setup | head (all表示所有)
Ansible批量自動化管理工具入門