004.Ansible Ad-Hoc命令集

一 Ad-Hoc使用場景

Ad-Hoc更傾向於解決簡單、臨時性任務。

1.1 Ad-Hoc基礎命令

基本語法:
  1 ansible <host-pattern> [options]
<host-pattern>:指Inventory中定義的主機或主機組,能夠爲ip、hostname、Inventory中的group組名等。同時支持具備「.」、「*」或「:」等特殊字符的匹配型字符串。
提示:<>表示該選項爲必選,[]表述是該選項中的參數任選其一或多個。
  1 [options]:
  2 -v,--verbose:輸出更詳細的執行過程信息,-vvv可獲得執行過程全部信息;
  3 -i PATH,--inventory=PATH:指定inventory信息,默認/etc/ansible/hosts;
  4 -f NUM,--forks=NUM:併發線程數,默認5個線程;
  5 --private-key=PRIVATE_KEY_FILE:指定祕鑰文件;
  6 -m NAME,--module-name=NAME:指定執行使用的模塊。
 
提示:-m指定模塊名稱, 默認狀況下是指command模塊, 能夠省略不寫。
  1 -M DIRECTORY,--module-path=DIRECTORY:指定模塊存放路徑,默認/usr/share/ansible;
  2 -a 'ARGUMENTS',--args=‘ARGUMENTS’"模塊參數;
  3 -k,--ask-pass SSH:認證密碼;
  4 -K,ask-sudo=pass sudo:用戶的密碼(--sudo時使用);
  5 -o,--one-line:標準輸出至一行;
  6 -s,--sudo:至關於Linux系統下的sudo命令;
  7 -t DIRECTORY,--tree=DIRECTORY:輸出信息至DIRECTORY目錄下,結果文件以遠程主機命名;
  8 -T SECONDS,--timeout=SECONDS:指定鏈接遠程主機的最大超時,單位是秒;
  9 -B NUM,--background=NUM:後臺執行命令,超NUM秒後停止正在執行的任務;
 10 -P NUM,--poll=NUM:按期返回後臺任務進度;
 11 -u USERNAME,--user=USERNAME:指定遠程主機以USERNAME運行命令;
 12 -U SUDO_USERNAME,--sudo-user=SUDO_USERNAME:使用sudo,至關於Linux系統下的sudo命令;
 13 -c CONNECTION,--connection=CONNECTION:指定鏈接方式,可用選項paramiko(SSH)、ssh、local,local方式經常使用於crontab和kickstarts;
 14 -l SUBSET,--limit=SUBSET:指定運行主機;
 15 -l ~REGEX,--limit=~REGEX:指定運行主機(正則);
 16 --list-hosts:列出符合條件的主機列表,不執行任何命令。
 
  • 場景1:檢查myhost主機組全部主機是否存活.
  1 [root@manage ~]# ansible myhost -f 5 -m ping
07
解析:
172.24.8.32:表示執行命令的主機;
SUCCESS:表示命令成功執行;
=> {……}:表示詳細返回結果;
"changed": false,:表示沒有對主機作變動;
"ping": "pong":表示執行ping命令返回結果爲pong。
  • 場景2:返回myhost組全部主機的hostname,並打印最詳細的執行過程到標準輸出。
  1 [root@manage ~]# ansible myhost1 -s -m command -a 'hostname' -vvv
解析:
執行過程圖以下:
08
  • 場景3:列出myhost組全部主機列表。
  1 [root@manage ~]# ansible myhost --list-hosts
09
  • 場景4:將172.24.8.31服務器以root執行sleep 20,設置最大鏈接超時爲2s,且設置爲後臺運行模式,執行過程每2s輸出一次進度,如5s還未執行完則終止該任務。
  1 [root@manage ~]# time ansible 172.24.8.31 -B 5 -P 2 -T 2 -m command -a 'sleep 20' -u root

1.2 經過Ad-Hoc查看系統設置

  • 場景1:批量查看myhost組全部主機的磁盤容量(command模塊)。
  1 [root@manage ~]# ansible myhost -a "df -hl"
10
解析:rc=0表示ResultCode=0,即命令執行成功。
  • 場景2:批量查看遠程主機內存使用狀況(shell模塊)。
  1 [root@manage ~]# ansible myhost -m shell -a "free -m"

二 Ansible模塊使用

2.1 Ad-Hoc查看模塊介紹

ansible-doc
ansible-doc是Ansible模塊文檔說明,針對每一個模塊都有詳細的用法及應用案例介紹,相似Linux的man。
基本語法:
  1 ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
參數:
-v,--version:顯示工具版本號;
-h,--help:顯示該help說明;
-M MODULE_PATH,--module-path=MODULE_PATH:指定Ansible模塊的默認加載目錄;
-l,--list:列出全部可用模塊;
-s,--snippet:只顯示playbook說明的代碼段;
示例:
  1 [root@manage ~]# ansible-doc -l		#列出支持的模塊
  2 [root@manage ~]# ansible-doc yum	        #查看模塊功能說明
 
  • 場景1:安裝redhat-lsb並查看服務器系統版本號。
  1 [root@manage ~]# ansible myhost -m yum -a 'name=redhat-lsb state=present'	#安裝軟件
11
解析:
"changed":true:主機是否有變動,true表示有,false表示沒有;
"msg":安裝過程信息;
"rc":0,resultcode:結果返回碼,非0返回碼每每是紅色而且錯誤的返回。
  1 [root@manage ~]# ansible myhost -a 'lsb_release -a'
12
  • 場景2:爲服務器安裝MySQL,並啓動,同時設置爲開機啓動.
  1 [root@manage ~]# ansible myhost -m yum -a 'name=mariadb,mariadb-server state=present'
  2 [root@manage ~]# ansible myhost -m service -a 'name=mariadb state=started enabled=yes'
 

三 Ansible主機、用戶與組管理

3.1 主機變動

  • 情景1:指定組內特定主機變動。
  1 [root@manage ~]# ansible myhost -m service -a 'name=ntpd state=started' --limit "172.24.8.31"
--limit:經過limit參數限定主機作變動
  • 場景2:經過指定具體IP限定主機作變動。
  1 [root@manage ~]# ansible 172.24.8.32 -m command -a "systemctl start ntpd"
  • 場景3:指定多臺主機作變動。
  1 [root@manage ~]# ansible 172.24.8.31:172.24.8.33 -m command -a "systemctl start ntpd"
解析:使用:指定多臺服務器,:非31-33,而是31和33兩臺主機。
  1 [root@manage ~]# ansible 172.24.8.3* -m command -a "systemctl stop ntpd"

3.2 Linux用戶管理模塊user

參數
必填
默認值
選項
說明
append
No
Yes/no
yes:增量添加group
no:全量變動group,只設置groups指定的group組
comment
 
 
用戶的描述信息
createhome
yes
Yes/no
yes:添加用戶同時建立家目錄;
no:添加用戶時不建立家目錄;
force
No
Yes/no
強制,結合state=absent使用,
至關於userdel --force
generate_ssh_key
No
Yes/no
是否生成祕鑰,不會覆蓋已有SSH key
group
 
 
可選,設定用戶的主組
groups
 
 
設置用戶附屬組,用逗號分隔的組;
當groups設定爲空,則會移除除主組外其餘全部組
home
 
 
可選,設定爲用戶的home目錄
login_class
 
 
可選,設定FreeBSD/OpenBSD/NetBSD系統的用戶
登錄class
name
 
 
用戶名
move_home
No
Yes/no
若爲yes,則會臨時遷移家目錄到特定目錄
non_unique
No
Yes/no
可選,結合-u使用,容許改變用戶ID爲非惟一值
password
 
 
可選,設定用戶的密碼(加密後的密碼)
remove
No
Yes/no
結合state=absent使用,
至關於userdel --remove
seuser
   
可選,設置seuser類型啓用SELinux
shell
 
 
可選,設定用戶的shell
skeleton
   
可選,設置用戶skel目錄,
需和createhome參數結合使用
ssh_key_bits
2048
 
可選,設定SSH key的加密位數
ssh_key_comments
$HOSTHOME
 
可選,定義SSH key註釋信息
ssh_key_file
.sha/id_rsa
 
可選,定義SSH key文件名
ssh_key_passphrase
 
 
設置SSH key密碼,若沒有提供,則默認不加密
ssh_key_type
Rsa
 
可選,指定SSH key類型
state
Present
Present
Absent
present:新增用戶
absent:刪除用戶
system
No
Yes/no
建立爲系統帳號,不會改變已經存在的用戶
uid
 
 
可選,設定爲用戶的uid
update_password
Always
Always
On_create
always:只有當用戶密碼不一樣纔會更新密碼
on_create:只爲新用戶設置密碼
  • 場景1:新增用戶
需求描述:爲myhost1服務器,新增用戶dba,使用BASH Shell,附加組爲adm、mysql,家目錄爲/home/dba。
  1 [root@manage ~]# ansible myhost1 -m user -a "name=dba shell=/bin/bash append=yes groups=adm,mysql home=/home/dba state=present"
13
  • 場景2:修改用戶屬組
需求描述:修改DBA附加組爲mysql(即刪除adm屬組)。
  1 [root@manage ~]# ansible myhost1 -m user -a "name=dba groups=mysql append=no"
14
  • 場景3:設置用戶密碼
需求描述:設置dba用戶密碼爲x120952576。
      1. 步驟一:生成加密後的密碼
        1. 方式一:使用passlib生成密碼
  1 [root@manage ~]# pip install passlib	#使用pip安裝psslib

提示:pip安裝參考《001.Pip簡介及使用》,passlib對於不一樣Python版本使用方式略有差別,Python多版本管理參考《Python多環境管理》。python

  1 [root@manage ~]# python -c "from passlib.hash import sha512_crypt;import getpass;print (sha512_crypt.encrypt(getpass.getpass()))"	#使用Python3.x sha512加密算法加密
  2 Password:					#輸入密碼x120952576

15

提示:sha512加密的密碼包括特殊元字符,如\n,在傳輸至遠程服務器可能致使密碼被轉移異常的問題。mysql

  1 [root@manage ~]# python -c 'import crypt;print(crypt.crypt("x120952576","dba"))'	#使用Python3.x 普通加密算法加密

16

    • 使用Python2.x sha512加密算法加密

算法

    • 使用Python3.x 普通加密算法加密

sql

    1. 方式二:使用mkpasswd生成密碼

shell

 
  1. 步驟二:執行加密操做
  1 [root@manage ~]# ansible myhost1 -m user -a "name=dba password=dbX.h0rUHw3Kc update_password=always"
17
參考文檔:http://blog.51cto.com/hellocjq/2064114
  • 場景4:刪除用戶
需求描述:刪除用戶dba,並刪除其家目錄和郵件列表。
  1 [root@manage ~]# ansible myhost1 -m user -a "name=dba remove=yes state=absent"
18

四 其餘模塊應用

4.1 Windows用戶管理

需求描述:新增用戶dba,並設置密碼爲x123456.
  1 [root@manage ~]# ansible myhost2 -m win_user -a "name=dba passwd=x123456 group=Administrator"

4.2 MySQL應用

需求描述:新增MySQL用戶dba,設置登陸密碼爲x123456,對mysql.host表有ALL權限。
  1 [root@manage ~]# ansible myhost1 -m mysql_user -a "login_host=localhost login_password=x120952576 login_user=root name=dba password=x123456 priv=mysql.host:ALL state=present"
19
提示:mysql_user須要MySQL-python模塊,可先安裝mysql-devel和MySQL-python組件。
相關文章
相關標籤/搜索