linux shell ansible 命令詳解


也可以參考ansible 模塊介紹的其他文章:https://www.cnblogs.com/guxiaobei/p/8316903.html

 

安裝ansible

yum install epel-release -y
yum install ansible -y

 

ansible被安裝到 /etc/ansible/

主要的配置文件

  • /etc/ansible/ansible.cfg
  • /etc/ansible/hosts

 

ansible 的配置文件的位置,可以隨便放,但是要遵循一個查找順序

按照以下優先級查找

1)$ANSIBLE_CONFIG 是否存在
2)當前目錄中是否存在ansible.cfg
3)查看當前用戶的家目錄是否有.ansible.cfg

  

針對/etc/ansible/ansible.cfg

有如下配置可以修改

forks = 5 #該項控制ansible的並發數量,可以根據自身服務器的性能調大,例如調到30

host_key_checking = False # 該項默認前面有一個注釋符號"#",通常我習慣把該項的注釋去掉,第一次鏈接不需要檢查host_key

inventory      = /etc/ansible/hosts #這個是主機清單文件的位置,可以修改到其他地方

 

針對/etc/ansible/hosts

該配置可以設置被控制節點的分組

如下設置了一個node組,該組有兩個IP,如下設置節點控制需要設置免密登陸

[node]
192.168.1.80
192.168.1.81

用如下的設置可以不需要設置免密,只是需要把密碼填寫在hosts文件中ansible_ssh_pass后面連接密碼

192.168.1.251   ansible_ssh_user=root ansible_ssh_pass=232410
192.168.1.252   ansible_ssh_user=root ansible_ssh_pass=232410

 

ansible在使用上分為

1)ad-hoc 用法 #一次性,單個執行命令的方式,如 ansible node -m ping

2)playbook 用法 #寫復雜腳本的方式

 

常用ansible 模

ansible ping, 測試節點的連通性,是否可以連接

ansible node -m ping

ansible 在遠程節點執行命令

ansible node -m raw -a "uptime"

 

command #執行shell命令(不支持管道等特殊字符)
shell #執行shell命令
scripts #執行shell腳本
yum_repository #配置yum倉庫
yum #安裝軟件
copy #變更配置文件
file #建立目錄或文件
service #啟動或者停止服務
mount #掛載設備
cron #定時任務
firewalld #防火牆
get_url #下載軟件


1)yum 安裝軟件模塊

ansible node -m yum -a "name=bind-utils state=present"
name #指定要安裝的軟件包名稱
state #指定使用yum的方法, present(安裝軟件包),absent(移除軟件包),latest(如有安裝,那么繼續升級到最新)


2) copy模塊

 

3)file模塊
path #指定遠程主機目錄或文件
recurse #遞歸授權
state #狀態
directory #在遠程創建目錄
touch #在遠程創建文件
link #link或者hard表示創建鏈接文件
absent #表示刪除文件或者目錄
mode #設置文件或者權限
owner #設置文件或者目錄屬主信息
group #設置文件或者目錄屬組信息


4)get_url文件下載模塊
#普通的下載
ansible node -m get_url -a "url=https://abc.com/abc.zip dest=/opt mode=0644"

#用戶名密碼校驗
ansible node -m get_url -a "url=https://abc.com/abc.zip dest=/opt mode=0644 username=user password=123456"


#校驗md5,或者sha256
ansible node -m get_url -a "url=https://abc.com/abc.zip dest=/opt mode=0644 checksum=md5:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f"

 

5)service, systemd 服務管理
ansible node -m service -a "name=crond state=started enabled=yes"
ansible node -m service -a "name=crond state=stopped enabled=no"
ansible node -m service -a "name=crond state=restarted"
ansible node -m service -a "name=crond state=reloaded"

name #定義要啟動服務的名稱
state #指定服務狀態
started #啟動服務
stopped #停止服務
restarted #重啟服務
reloaded #重載服務
enabled #開機自啟

6)group組模塊

ansible node -m group -a "name=infra gid=888"
name #指定創建的組名
gid #指定組的gid
state
absent #移除遠程主機的組
present #創建遠端主機的組(默認)

7)user 模塊添加用戶
#創建用戶
ansible node -m user -a "name=tom comment='A developer' uid=666 group=users shell=/bin/bash create_home=True"
#給用戶添加額外的組
ansible node -m user -a "name=tom groups='wheel,root' append=yes "
#給用戶創建密鑰對
ansible node -m user -a "name=tom generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa"
#給用戶創建密碼
#1.通過debug模塊用以下方,生成為12345的密碼,返回的msg結果就是加密后的秘密
ansible localhost -m debug -a "msg={{'12345'|password_hash('sha512','salt')}}"
localhost | SUCCESS => {
"msg": "$6$salt$WP.KbhMfqJG7dtlBltkj4Um4rVhch54R5JCi..."
}
#用上面生成的加密字符串,給用戶添加密碼
ansible node -m user -a 'name=tom password=$6$salt$WP.KbhMfqJG7dtlBltkj4Um4rVhch54R5JCi... create_home=yes shell=/bin/bash'

實測,以上用debug模塊生成密碼的方式,包含一些特殊字符的情況下,一直報錯

推薦用:

ansible all -m raw -a "echo 'my_root_new_password' | passwd --stdin root" #特殊密碼還是會報錯

用ansible all -m script -a "./changpass.sh" script 修改密碼

 

#刪除用戶
ansible node -m user -a "name=tom state=absent"

uid #指定用戶的uid
group #指定用戶組名稱
groups #指定附加組名稱
password #給用戶添加密碼(記得用單引號)
shell #指定用戶的登錄shell
create_home #是否創建家目錄


8)cron 模塊
#添加一個任務時間是minute,hour,day,month,weekday,如果省略就是代表*
#不同任務一定要加一個名字,
ansible node -m cron -a "name='cron01' minute=* hour=* day=* month=* weekday=* job='/bin/sh test.sh'"
ansible node -m cron -a "name='cron01' job='/bin/sh test.sh'"
#刪除某個任務
ansible node -m cron -a "name='cron01' job='/bin/sh test.sh' state=absent"
#注釋相應的定時任務,使任務失效
ansible node -m cron -a "name='cron01' job='/bin/sh test.sh' disabled=yes"

9) mount 模塊
####
#使用ansible 在192.168.1.100上yum安裝nfs-utils
#通過ansible 寫入配置文件到192.168.1.100
#在192.168.1.100上運行nfs服務
#通過ansible 在192.168.1.101上掛載192.168.1.100上的共享目錄

ansible 192.168.1.100 -m yum -a 'name=nfs-utils state=present'
ansible 192.168.1.100 -m copy -a 'content="/media 192.168.1.0/24(rw,sync,no_all_squash)" dest=/etc/exports'
ansible 192.168.1.100 -m systemd -a "name=nfs state=started enabled=yes"

#使用mount模塊掛載,並且寫入配置到/etc/fstab
ansible 192.168.1.101 -m mount -a "src=192.168.1.100:/media path=/opt fstype=nfs opts=defaults state=mounted"
#使用mount模塊卸載,並且清空/etc/fstab中相應的配置
ansible 192.168.1.101 -m mount -a "src=192.168.1.100:/media path=/opt fstype=nfs opts=defaults state=absent"


state
present #開機掛載,僅將掛載配置寫入/etc/fstab
mounted #掛載設備,並將配置寫入/etc/fstab
unmounted #卸載設備,不會清除/etc/fstab寫入的配置
absent #卸載設備,會清理/etc/fstab寫入的配置

 

10)unarchive 模塊

ansible node -m unarchive -a "src=./abc.tar.gz dest=/usr/local/ copy=yes mode=0755"

參數:
copy:默認為yes,當copy=yes,那么拷貝的文件是從ansible主機復制到遠程主機上的,如果設置為copy=no,那么會在遠程主機上尋找src源文件
src:源路徑,可以是ansible主機上的路徑,也可以是遠程主機上的路徑,如果是遠程主機上的路徑,則需要設置copy=no
dest:遠程主機上的目標路徑
mode:設置解壓縮后的文件權限

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM