Ansible
由于公司升级服务器和处理问题抓包,
可能需要同时操作多台服务器(繁琐的解压、copy、备份),
我便发现了ansible工具!
现在通过下班时间部署在自己虚拟机测试与总结,有错误与不足的地方请提醒,
参考资料有博客园大神分享与同事分享文档!(本文章里都有附属链接)
欢迎交流:
本版为ansible --version:ansible 2.9.21
简单配置
/etc/ansible/:ansible目录
-
vim ansible.cfg
-
#forks = 5 #ssh并发数量
#ask_pass = True #使用密钥还是密码远程,True代表使用密码
#host_key_checking = False #是否校验密钥(第一次ssh时是否提示yes/no)
-
-
打开/etc/ansible/host文件最下边添加自定义模块名
- 示例:[test] #模块名字
- 192.168.XXX.XXX
- 示例:[test] #模块名字
执行状态
- 黄色:成功执行并伴随着状态的改变
绿色:成功执行并且没有发生状态的改变
红色: 执行失败
免密操作
-
方式一
- 将主机密钥发送到控制的机器
- ssh-keygen
- ssh-copy-id 1.1.1.1 发送秘钥对到这个ip
- 将主机密钥发送到控制的机器
-
方式二
- vim host
- 示例:
- [db] #自定义模块名
- 172.25.70.1 ansible_ssh_user=“root” ansible_ssh_pass=“redhat”
- 地址后加 ansible_ssh_user=用户名 ansible_ssh_port=端口 ansible_ssh_pass=密码
测试&帮助操作
ansible test --list #查看自定义test模块列表信息
ansible test -m ping #测试服务器是否连接成功
ansible-doc -l #列出所有模块
ansible-doc -l | grep yum #在所有模块中过滤关键词
ansible-doc yum #查看模块帮助
ansible -h #查看帮助选项
常用模块
shell模块
-
可以使用"<",">","|",";","&"等符号特殊符号
示例:
ansible test -m shell -a ‘df -h’ #查看磁盘挂载情况
-
ansible test -m shell -a ‘ls -l /home/’ #查看home目录
-
ansible test -m shell -a “rm -rf ~/*” #删除所有文件
-
ansible test -m shell -a ‘mkdir /home/2233.txt’ #创建文件 (报错不用理会)
-
ansible test -m shell -a ‘tar -cf ybt.tar.gz /home/*’ #压缩目录文件
-
chdir 在执行命令前,进入到指定目录中
示例:ansible test -m shell -a ‘chdir=/home/ ls-l’
script模块
- 执行本目录下脚本copy到远程主机后台执行后删除 (test为模块名)
- 示例:ansible test -m script -a “./joben.sh”
- 示例:ansible test -m script -a ‘chdir=/root/cin/etc/ A/bak.sh’
- chdir=在执行命令前,进入到控制主机指定目录中 在相对路径A执行脚本bak.sh
unarchive模块
-
管理机上的压缩文件到远程主机解压:
ansible test -m unarchive -a “src=本地目录压缩包 dest=远程要解压到的目录 mode=0755 copy=yes”- 示例:ansible test -m unarchive -a ‘src=/root/jo.tar.gz dest=/root/ copy=yes’
-
解压远程主机上的文件到目录:
ansible all -m unarchive -a “src=远程主机/目录/文件 dest=远程要解压到的目录 mode=0755 copy=no” #mode可省略 -
owner=修改属主
group=修改属组mode= 修改权限
copy模块
-
ansible test -m copy -a “src=本地 dest=目标”
-
以下是copy并备份示例(注:文件内容一样不备份不替换!)backup=no 不备份
-
(注:文件内容不一样,直接替换)
-
示例:ansible test -m copy -a "src=/test/test1.txt dest=/usr/local/ backup=yes "
-
示例:ansible test -m copy -a ‘src=kk.kk.l dest=/home/’ # 默认将本目录文件copy到远程机
-
src=本地 dest=目标
owner=修改属主
group=修改属组mode= 修改权限
fetch模块
fetch模块与copy类似,但是作用相反,可以将其他主机的文件拷贝到本地
- ansible test -m fetch -a “src=目标路径 dest=本地路径”
- ansible test -m fetch -a ‘src=/home/test.txt dest=./’
file模块
path=/路径/文件 #" path + file " = " dest + file " = " name + file "
state=选项
owner=修改属主
group=修改属组
mode= 修改权限
state absent 将数据进行删除
state directory 创建一个空目录信息
state file 查看指定目录信息是否存在
state touch 创建一个空文件信息
state hard/link 创建链接文件
-
ansible test -m file -a ‘path=/home/bi.txt state=touch’ # 创建文件
-
ansible test -m file -a ‘path=/home/bi.txt state=absent’ # 删除文件或目录
-
ansible test -m file -a’path=/home/* state=absent’ # 删除文件
-
ansible test -m file -a ‘path=/home/test/ state=directory’ # 创建目录
-
ansible test -m file -a “path=/home/mydir owner=sshd group=dc mode=0777” # 修改权限和组
-
创建软连接示例:src源文件 path存放软件路径文件
- ansible test -m file -a ‘src=/home/l.txt path=/home/k state=link’
-
ansible test -m file -a ‘src=/home/l.txt path=/home/kke state=hard’ # 创建硬链接
lineinfile模块
单个文件添加内容
- ansible test -m lineinfile -a “path=目标路径 line=‘添加的内容’”
- ansible test -m lineinfile -a “path=/home/test.txt line=‘strive’”
- 在内容之后插入(insertafter)
- ansible test -m lineinfile -a “path=目标路径 line=‘添加的内容’ insertafter=‘在哪个位置之后’”
- ansible test -m lineinfile -a “path=/home/test.txt line=‘shen’ insertafter=‘strive’”
replace模块
- 替换
- ansible test -m replace -a “path=目标路径 regexp=旧内容 replace=新内容”
- ansible test -m replace -a “path=/home/test.txt regexp=‘hello’ replace=‘hello wrold’”
user模块
-
ansible test -m user -a ‘name=shen’ # 创建用户
-
创建用户:dba,使用BASH Shell,附加组为admins,dbagroup,家目录为/home/dba,注意:附加组必须为已经存在的组。
-
ansible test -m user -a “name=dba groups=admins,dbagroup append=yes home=/home/dba shell=/bash/shell state=present”
-
groups设定,groups=group1,group2.。。。
增量添加属组,append=yes
状态,state=present
家目录:home=/home/dba
shell:shell=/bash/shell
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z4bs0Xss-1628340828393)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210702171019665.png)]
-
ansible test -m user -a ‘name=dba groups=shen’ # 修改用户属组
-
ansible test -m user -a ‘name=shen remove=yes state=absent’ #删除用户shen
-
修改密码:
-
password_hash:# 加密函数
-
ansible test -m user -a “name=dudu password={ {‘123’| password_hash(‘sha512’)}}”
-
密码为123 password_hash(‘sha512’)}}为固定格式
-
cron定时任务
定时任务模块:点击参考博客
参数
day= #日应该运行的工作( 1-31, *, */2, )
hour= # 小时 ( 0-23, *, */2, )
minute= #分钟( 0-59, *, */2, )
month= # 月( 1-12, *, /2, )
weekday= # 周 ( 0-6 for Sunday-Saturday,, )
job= #指明运行的命令是什么
name= #定时任务描述
reboot # 任务在重启时运行,不建议使用,建议使用special_time
special_time #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
state #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务
user # 以哪个用户的身份执行
示例:ansible test -m cron -a ‘name=“定时任务测试” minute=/5 hour=/1 job=“echo 1 >> /root/1.txt”’ #设置定时任务
查看:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFm3MZ9P-1628340828396)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210705114056420.png)]
删除刚刚的定时任务:ansible test -m cron -a “name=‘定时任务测试’ minute=/5 hour=/1 job=‘echo 1 >> /root/1.txt’ state=absent”</