ansible ansible批量管理工具的搭建與簡單的操作
阿新 • • 發佈:2018-11-21
ansible批量管理工具的搭建與簡單的操作
ansible的安裝
# [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [[email protected] ~]# uname -r 3.10.0-862.3.3.el7.x86_64 [[email protected] ~]# systemctl stop firewalld [[email protected] ~]# systemctl disable firewalld [[email protected] ~]# systemctl stop NetworkManager [[email protected] ~]# systemctl disable NetworkManager #通過yum源方式安裝ansible [[email protected] ~]# yum -y install epel-release [[email protected] ~]# yum -y install ansible #通過Python的pip方式安裝ansible [[email protected] ~]# yum -y install epel-release [[email protected] ~]# yum -y install python2-pip [[email protected] ~]# pip install ansible
ssh的,安全策略
備份:cp /etc/ssh/sshd_config{,.bak} [[email protected] ~]# cat -n /etc/ssh/sshd_config.bak | sed -n '17p;38p;43p;47p;65p;79p;115p' 17 #Port 22 #修改ssh連線埠 38 #PermitRootLogin yes #是否允許root賬號遠端登陸 43 #PubkeyAuthentication yes #是否開啟公鑰連線認證 47 AuthorizedKeysFile .ssh/authorized_keys #公鑰檔案的放置位置 65 PasswordAuthentication yes #是否開啟密碼驗證登陸 79 GSSAPIAuthentication yes #是否關閉GSSAPI認證 115 #UseDNS yes #是否關閉DNS反向解析 [[email protected] ~]# cat -n /etc/ssh/sshd_config | sed -n '17p;38p;43p;47p;65p;79p;115p' 17 Port 22221 #工作中需要設定到1萬以上的埠,避免被掃描出來。 38 PermitRootLogin yes #如果不是超大規模的伺服器,為了方便我們可以暫時開啟root遠端登入 43 PubkeyAuthentication yes #開啟公鑰認證模式 47 AuthorizedKeysFile .ssh/authorized_keys #公鑰放置位置 65 PasswordAuthentication no #為了安全我們關閉伺服器的密碼認證方式 79 GSSAPIAuthentication no #關閉GSSAPI認證,極大提高ssh連線速度 115 UseDNS no #關閉DNS反向解析,極大提高ssh連線速度
然後配置主機清單
/etc/ansible/hosts檔案中可以定義被管理主機,Ansible通過讀取/etc/ansible/hosts檔案內定義的主機清單批量做一些操作。比如定義一個nginx組,包含一臺主機Web01,再定義一個apache組,包含另一臺主機Web02. [[email protected] ~]# 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時的密碼
Ansible伺服器簡單的綜合安全管理策略 #禁止非root使用者檢視Ansible管理伺服器端/etc/hosts檔案 [[email protected] ~]# ll /etc/hosts -rw-r--r--. 1 root root 180 9月 9 00:38 /etc/hosts [[email protected] ~]# chmod 600 /etc/hosts #禁止非root使用者檢視Ansible的主機清單配置檔案 [[email protected] ~]# ll /etc/ansible/hosts -rw-r--r-- 1 root root 87 9月 9 21:59 /etc/ansible/hosts [[email protected] ~]# chmod 600 /etc/ansible/hosts
[[email protected] ~]# /usr/local/python/bin/ansible-doc -l 檢視總幫助 [[email protected] ~]# /usr/local/python/bin/ansible-doc -s shell 檢視shell模組的幫助
ansible的十大基礎模組
1.
ping模組 Ansible中使用ping模組來檢測指定主機的連通性
2.
command模組 在遠端主機執行命令,不支援管道符和重定向等複雜命令,可完全被shell模組替代 [[email protected] ~]# ansible Web01 -m command -a 'uptime'
3.
shell模組 Ansible中的shell模組可以在被管理主機上執行命令,並支援像管道符重定向這樣的複雜命令。 #在Web01上建立使用者yunjisuan,並非互動方式設定密碼 [[email protected] ~]# ansible Web01 -m shell -a 'useradd yunjisuan'
4.
cron模組 Ansible中的cron模組用於定義任務計劃。主要包括兩種狀態(state); crontab時間週期: minute:分鐘 hour:小時 day:日期 month:月份 weekday:週期 crontab任務: job:指明執行的命令是什麼 crontab任務描述: name:定時任務描述(定時任務清除的依據) state狀態: present:表示新增(省略狀態時預設使用); absent:表示移除; crontab任務的使用者身份: user:指定定時任務以哪個使用者身份執行 #新增定時任務計劃,在所有被管理的主機裡每十分鐘輸出hello字串,定時任務描述為test cron job [[email protected] ~]# ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'
5.
copy模組 Ansible中的copy模組用於實現檔案複製和批量下發檔案。其中使用src來定義本地原始檔路徑;使用dest定義被管理主機檔案路徑;使用content則是使用指定資訊內容來生成目標檔案。 ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts owner=root mode=640 backup=yes'
6
script模組 Ansible中的script模組可以將本地指令碼複製到被管理主機的記憶體中並執行,不會在被管理主機中留下指令碼檔案。 ansible all -m script -a '/tmp/test.sh'
7.
yum模組 利用yum模組安裝軟體包,雖然能被shell模組替代 但是用yum模組更顯專業一些 軟體包名: name:指定軟體包的名字 state狀態: present:安裝軟體包(預設就是這個) absent:解除安裝軟體包 #安裝nmap軟體包 [[email protected] ~]# ansible all -m yum -a 'name=nmap' #解除安裝nmap軟體包 [[email protected] ~]# ansible all -m yum -a 'name=nmap state=absent'
8.
service模組 利用service模組管理服務程式,雖然能被shell模組替代 但是用service模組更顯專業一些 服務名稱: name:指定服務的名字 state狀態: started:啟動服務 stopped:停止服務 restarted:重啟服務 reloaded:平滑過載 enabled開機自啟動: true:設定開機自啟動 false:設定開啟不啟動 #啟動firewalld並設定開機自啟動 [[email protected] ~]# ansible Web01 -m service -a 'name=firewalld state=started enabled=true' #關閉firewalld並設定開機不啟動 [[email protected] ~]# ansible Web01 -m service -a 'name=firewalld state=stopped enabled=false'
9.
user模組 使用者管理模組。管理使用者賬號 :指定使用者名稱 name:指定操作的使用者的名字 :使用者描述 comment:指定使用者的描述資訊 :createhome:是否建立家目錄 :uid:指定使用者的uid號 :groups:指定使用者的附加組(預設建立和使用者名稱相同的組) :password:指定使用者的密碼 :update_password:更新使用者的密碼 :shell指定使用者的登陸方式 /bin/bash:能登入系統 /sbin/nologin:不能登入系統 :home:指定使用者的家目錄路徑 :state狀態: present:建立使用者(預設就是這個) absent:刪除使用者 :remove:當指定state=absent時,確認是否刪除使用者家目錄 true false #在Web02上建立一個普通使用者yunjisuan,並設定使用者的密碼為123123 [[email protected] ~]# ansible Web02 -m user -a 'name=yunjisuan comment="welcom to yunjisuan" uid=1066 groups=wheel password=123123 shell=/bin/bash home=/home/yunjisuan'
密碼是明文的需要下載個命令加密
利用ansible的user模組狀態使用者時要注意在password引數的後邊新增密文,否則不能登陸使用者 通過Python的pip程式安裝passlib即可為密碼加密 #安裝Python2的pip工具,並通過pip工具安裝Python的加密模組來給密碼加密 [[email protected] ~]# yum -y install epel-release [[email protected] ~]# yum -y install python2-pip [[email protected] ~]# pip install passlib #生成密文密碼 [[email protected] ~]# 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 #加密後的密碼
10.
setup模組 Ansible中使用setup模組收集,檢視被管理主機的facts(facts是Ansible採集被管理主機裝置資訊的一個功能)。每個被管理主機在接收並執行管理命令之前,都會將自己的相關資訊(作業系統版本,IP地址等)傳送給控制主機 #檢視遠端主機的facts資訊 [[email protected] ~]# ansible Web01 -m setup | head
ansible的安裝
# [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [[email protected] ~]# uname -r 3.10.0-862.3.3.el7.x86_64 [[email protected] ~]# systemctl stop firewalld [[email protected] ~]# systemctl disable firewalld [[email protected] ~]# systemctl stop NetworkManager [[email protected] ~]# systemctl disable NetworkManager #通過yum源方式安裝ansible [[email protected] ~]# yum -y install epel-release [[email protected] ~]# yum -y install ansible #通過Python的pip方式安裝ansible [[email protected] ~]# yum -y install epel-release [[email protected] ~]# yum -y install python2-pip [[email protected] ~]# pip install ansible
ssh的,安全策略
備份:cp /etc/ssh/sshd_config{,.bak} [[email protected] ~]# cat -n /etc/ssh/sshd_config.bak | sed -n '17p;38p;43p;47p;65p;79p;115p' 17 #Port 22 #修改ssh連線埠 38 #PermitRootLogin yes #是否允許root賬號遠端登陸 43 #PubkeyAuthentication yes #是否開啟公鑰連線認證 47 AuthorizedKeysFile .ssh/authorized_keys #公鑰檔案的放置位置 65 PasswordAuthentication yes #是否開啟密碼驗證登陸 79 GSSAPIAuthentication yes #是否關閉GSSAPI認證 115 #UseDNS yes #是否關閉DNS反向解析 [[email protected] ~]# cat -n /etc/ssh/sshd_config | sed -n '17p;38p;43p;47p;65p;79p;115p' 17 Port 22221 #工作中需要設定到1萬以上的埠,避免被掃描出來。 38 PermitRootLogin yes #如果不是超大規模的伺服器,為了方便我們可以暫時開啟root遠端登入 43 PubkeyAuthentication yes #開啟公鑰認證模式 47 AuthorizedKeysFile .ssh/authorized_keys #公鑰放置位置 65 PasswordAuthentication no #為了安全我們關閉伺服器的密碼認證方式 79 GSSAPIAuthentication no #關閉GSSAPI認證,極大提高ssh連線速度 115 UseDNS no #關閉DNS反向解析,極大提高ssh連線速度
然後配置主機清單
/etc/ansible/hosts檔案中可以定義被管理主機,Ansible通過讀取/etc/ansible/hosts檔案內定義的主機清單批量做一些操作。比如定義一個nginx組,包含一臺主機Web01,再定義一個apache組,包含另一臺主機Web02. [[email protected] ~]# 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時的密碼
Ansible伺服器簡單的綜合安全管理策略 #禁止非root使用者檢視Ansible管理伺服器端/etc/hosts檔案 [[email protected] ~]# ll /etc/hosts -rw-r--r--. 1 root root 180 9月 9 00:38 /etc/hosts [[email protected] ~]# chmod 600 /etc/hosts #禁止非root使用者檢視Ansible的主機清單配置檔案 [[email protected] ~]# ll /etc/ansible/hosts -rw-r--r-- 1 root root 87 9月 9 21:59 /etc/ansible/hosts [[email protected] ~]# chmod 600 /etc/ansible/hosts
[[email protected] ~]# /usr/local/python/bin/ansible-doc -l 檢視總幫助 [[email protected] ~]# /usr/local/python/bin/ansible-doc -s shell 檢視shell模組的幫助
ansible的十大基礎模組
1.
ping模組 Ansible中使用ping模組來檢測指定主機的連通性
2.
command模組 在遠端主機執行命令,不支援管道符和重定向等複雜命令,可完全被shell模組替代 [[email protected] ~]# ansible Web01 -m command -a 'uptime'
3.
shell模組 Ansible中的shell模組可以在被管理主機上執行命令,並支援像管道符重定向這樣的複雜命令。 #在Web01上建立使用者yunjisuan,並非互動方式設定密碼 [[email protected] ~]# ansible Web01 -m shell -a 'useradd yunjisuan'
4.
cron模組 Ansible中的cron模組用於定義任務計劃。主要包括兩種狀態(state); crontab時間週期: minute:分鐘 hour:小時 day:日期 month:月份 weekday:週期 crontab任務: job:指明執行的命令是什麼 crontab任務描述: name:定時任務描述(定時任務清除的依據) state狀態: present:表示新增(省略狀態時預設使用); absent:表示移除; crontab任務的使用者身份: user:指定定時任務以哪個使用者身份執行 #新增定時任務計劃,在所有被管理的主機裡每十分鐘輸出hello字串,定時任務描述為test cron job [[email protected] ~]# ansible all -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'
5.
copy模組 Ansible中的copy模組用於實現檔案複製和批量下發檔案。其中使用src來定義本地原始檔路徑;使用dest定義被管理主機檔案路徑;使用content則是使用指定資訊內容來生成目標檔案。 ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts owner=root mode=640 backup=yes'
6
script模組 Ansible中的script模組可以將本地指令碼複製到被管理主機的記憶體中並執行,不會在被管理主機中留下指令碼檔案。 ansible all -m script -a '/tmp/test.sh'
7.
yum模組 利用yum模組安裝軟體包,雖然能被shell模組替代 但是用yum模組更顯專業一些 軟體包名: name:指定軟體包的名字 state狀態: present:安裝軟體包(預設就是這個) absent:解除安裝軟體包 #安裝nmap軟體包 [[email protected] ~]# ansible all -m yum -a 'name=nmap' #解除安裝nmap軟體包 [[email protected] ~]# ansible all -m yum -a 'name=nmap state=absent'
8.
service模組 利用service模組管理服務程式,雖然能被shell模組替代 但是用service模組更顯專業一些 服務名稱: name:指定服務的名字 state狀態: started:啟動服務 stopped:停止服務 restarted:重啟服務 reloaded:平滑過載 enabled開機自啟動: true:設定開機自啟動 false:設定開啟不啟動 #啟動firewalld並設定開機自啟動 [[email protected] ~]# ansible Web01 -m service -a 'name=firewalld state=started enabled=true' #關閉firewalld並設定開機不啟動 [[email protected] ~]# ansible Web01 -m service -a 'name=firewalld state=stopped enabled=false'
9.
user模組 使用者管理模組。管理使用者賬號 :指定使用者名稱 name:指定操作的使用者的名字 :使用者描述 comment:指定使用者的描述資訊 :createhome:是否建立家目錄 :uid:指定使用者的uid號 :groups:指定使用者的附加組(預設建立和使用者名稱相同的組) :password:指定使用者的密碼 :update_password:更新使用者的密碼 :shell指定使用者的登陸方式 /bin/bash:能登入系統 /sbin/nologin:不能登入系統 :home:指定使用者的家目錄路徑 :state狀態: present:建立使用者(預設就是這個) absent:刪除使用者 :remove:當指定state=absent時,確認是否刪除使用者家目錄 true false #在Web02上建立一個普通使用者yunjisuan,並設定使用者的密碼為123123 [[email protected] ~]# ansible Web02 -m user -a 'name=yunjisuan comment="welcom to yunjisuan" uid=1066 groups=wheel password=123123 shell=/bin/bash home=/home/yunjisuan'
密碼是明文的需要下載個命令加密
利用ansible的user模組狀態使用者時要注意在password引數的後邊新增密文,否則不能登陸使用者 通過Python的pip程式安裝passlib即可為密碼加密 #安裝Python2的pip工具,並通過pip工具安裝Python的加密模組來給密碼加密 [[email protected] ~]# yum -y install epel-release [[email protected] ~]# yum -y install python2-pip [[email protected] ~]# pip install passlib #生成密文密碼 [[email protected] ~]# 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 #加密後的密碼
10.
setup模組 Ansible中使用setup模組收集,檢視被管理主機的facts(facts是Ansible採集被管理主機裝置資訊的一個功能)。每個被管理主機在接收並執行管理命令之前,都會將自己的相關資訊(作業系統版本,IP地址等)傳送給控制主機 #檢視遠端主機的facts資訊 [[email protected] ~]# ansible Web01 -m setup | head