Linux:ansible自动化运维工具

环境介绍

当前所有执行权限我是在root下执行的,如果提示权限之类的,可以在每句命令前 加上 sudo

ansible主服务器 192.168.0.194

另外两个客户端分别为 192.168.0.193 192.168.0.192

软件只需要在主服务器上安装,客户端不需要去安装软件,因为他们相互使用的是ssh

只需要在主服务器上安装好软件,然后生成一个密钥发送至客户端,实现,主服务器免密ssh连接客户机即可


安装ansible

在主服务器上进行软件安装

复制代码
rm -rf /etc/yum.repos.d/*

删除所有yum仓库(如果你原来有重要yum仓库记得备份)

复制代码
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

安装阿里云yum仓库镜像

复制代码
yum clean all && yum makecache

清除以前缓存 &&更 新缓存

复制代码
yum -y install epel-release

yum -y install ansible

主服务器生成密钥ssh免密登录客户机

在主服务器上

复制代码
ssh-keygen -t rsa

输入完命令一直回车即可

ssh-copy-id 用户@ip地址

传输密钥,传输完以后可以进行免密ssh连接

复制代码
ssh-copy-id root@192.168.0.193

输入完命令以后,yes,输入密码就可以了

如果有另外的客户端,也执行同样操作,全测试可以免密ssh登录即可

复制代码
ssh-copy-id root@192.168.0.192

只要ssh登录时候不用密码就是成功了


主机列表 /etc/ansible/hosts

主机列表可以写一个组,组名下面写ip或者主机名,就是这个组的成员,控制这个组,或控制单个都是可以的

复制代码
vim /etc/ansible/hosts

进去以后可以单起一行,前面没有的#才行

格式为

组名

主机ip或主机名

......

web就是组名

下面的就是ip,当我们对web进行操作,两个主机就会回馈

此外还可以这样写......

web ## 主机组

192.168.10.2

192.168.10.3

test01

www.bdqn.cn:222 ##通过端口222管理设备

mail

ly01.mail.cn

ly

ly2:5.test.com ##正则表达式:表示4台主机ly2,ly3,ly4,ly5..


基础操作

复制代码
ansible web -m command -a "firewall-cmd --state"

查看web组的主机有没有开防火墙

复制代码
ansible web -m command -a "systemctl stop firewalld" --limit "192.168.0.193"

对web组的192.168.0.193执行关闭防火墙操作

可以指定ip去执行

复制代码
ansible 192.168.0.192  -m command -a "ip a"

通过通配符来指定多个主机远程操作(可以理解为一个网段)

复制代码
ansible 192.168.0.* -m command -a "firewall-cmd --state"

Ansible注意事项->提示颜色信息说明

黄色:对远程节点进行相应修改

绿色:对远程节点不进行相应修改,或者只是对远程节点信息进行查看

红色:操作执行命令有异常

紫色:表示对命令执行发出警告信息(可能存在的问题,给你一下建议)


ansible命令

检查清单中所有主机是否存活

-f 并发线程数为5

-m 调用ping模块(并不是ping命令)

复制代码
ansible all -f 5 -m ping

success---表示成功; => {} 表示返回结果

changed false 表示没有对主机进行更改

##pong ---ping模块返回结果

all就是全部的意思,也可以指定某个组或者ip

列出web组主机列表

复制代码
ansible web --list

批量显示web组磁盘使用情况

复制代码
ansible web -m command -a "df -hT"

ansible-doc 可用来查询模块文档的说明,类似于man

列出所有模块信息

复制代码
ansible-doc -l

查询ping模块的说明信息

复制代码
ansible-doc ping

ansible-console 交互式工具。类似于cmd或shell

复制代码
ansible-console 

进去之后可以使用cd + 组名进去进行直接操作

list可以列出当前组的成员


ansible常用模块

Shell功能全面但是执行率低

command不支持:逻辑运算符、条件判断符号、重定向命令或者是管道命令

command模块---远程执行命令

chdir---在远程主机运行命令前,要提前进入的目录

creates---创建文件(如文件已存在,则不执行)

removes--移除文件(如文件不存在,则不执行)

executable--更改shell环境(并且执行命令时要使用绝对路径)

在web组主机上运行命令,运行前切换到/root目录

复制代码
ansible web -m command -a "chdir=/root  ls ./"

web就是组名

shell模块---相当于调用远程主机的shell进程,在该shell下打开一个子shell运行命令

复制代码
ansible web -m shell -a 'echo "hello ly" >> /tmp/hello.txt'

web就是组名

ssh ip地址 cat /tmp/hello.txt


copy模块---在远程主机执行复制操作文件。

-- src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

-- content:用于替代"src",可以直接设定指定文件的值

-- dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

-- directory_mode:递归的设定目录的权限,默认为系统默认权限

-- force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

-- others:所有的file模块里的选项都可以在这里使用

mode--文件权限

owner--属主

group--属组

复制代码
ansible web -m copy -a "src=/etc/hosts dest=/tmp/ mode=777 owner=nobody group=root" 

更改远程主机名为ly

复制代码
ansible ip地址或组名 -m hostname -a "name=ly" 

yum模块---调用远程主机的yum程序进行管理

Ansible yum模块主要用于软件的安装、升级、卸载,支持rpm软件包的管理

yum模块使用详解:

conf_file:设置远程yum执行时所依赖的yum配置文件

disable_gpg_check:安装软件包之前是否检查gpg key

name:需要安装的软件名称,支持软件组安装

update_cache:安装软件之前更新缓存

enablerepo:指定repo源名称

skip_broken:跳过异常软件节点

state:软件包状态,包括installed、present、latest、absent、removed present, installed是指安裝套件,而latest指安裝最新的套件,也就是使用 yum mirror 上最新的版本。

absent, removed 没有什么区别

调用yum模块安装httpd服务

复制代码
 ansible ip地址 -m yum -a "name=httpd state=present"

service模块---管理远程主机服务

name---服务名

state=started/stopped/restarted 动作为启动、停止、重启

enabled=no/yes 是否设置为开机启动

runlevel :如果定义了开机启动,则设置运行级别

确保要开启的服务软件已经安装了

复制代码
ansible 192.168.10.3 -m service -a "name=httpd state=started enabled=yes"

执行完就这样

running就开启成功了


user模块---管理远程主机用户账户

Ansible user模块主要用于操作系统用户、组、权限、密码等操作

user模块使用详解:

system:默认创建为普通用户,为yes则创建系统用户

append:添加一个新的组

comment:添加描述信息

createhome:给用户创建家目录

force:强制删除用户

group:创建用户主组

groups:将用户加入组或者附属组添加

home:指定用户的家目录

move_home=yes/no 如果设置的家目录已存在,是否将已存在的家目录进行移动

name:表示状态,是否create、remove、modify

password:指定用户的密码,为加密密码

remove:删除用户

shell:设置用户的shell登录环境

uid:设置用户ID

update_password:修改用户密码

state:用户状态,默认为present,表示新建用户

复制代码
ansible web -m user -a 'name=user1 system=yes uid=501 group=root groups=sshd shell=/sbin/nologin home=/user1 password=123 comment="test user"

在web组的所有主机上创建一个user1用户,是系统用户,uid是501 组是root 附属组是sshd ,shell环境是/sbin/nologin ,家目录是/user1,密码是123,介绍是test user

复制代码
ansible web -m user -a 'name=user1 password=123'

如果你就简单的设置一下那么他和useradd user1差不多,

复制代码
ansible web -m user -a "name=user1 remove=yes state=absent"

删除刚刚添加的用户

相关推荐
weixin_3077791331 分钟前
Linux下Docker Compose里运行PostgreSQL数据库故障诊断Shell脚本
linux·运维·数据库·docker·postgresql
AI创界者39 分钟前
安全测试环境搭建:在 Kali Linux 中部署与配置开源 WebShell 管理工具 AntSword(蚁剑)
linux·运维·安全
猪头少年不会遇见算法学姐1 小时前
Makefile快速上手笔记
linux·学习
qiu_lovejun9981 小时前
linux安装docker和redis和rabbitmq和nginx和rocketmq和kafka
linux·redis·docker·kafka·rabbitmq·rocketmq
运维大师1 小时前
【Linux运维极简教程】04-进程与服务管理
linux·运维
keke.shengfengpolang1 小时前
自动化考什么证书对就业有帮助?
运维·自动化
源码学社1 小时前
Spug 3.0 Ubuntu 22.04 Docker 部署文档
linux·ubuntu·docker·windows安装·spug
tebukaopu1481 小时前
ubuntu挂载nfs
linux·运维·ubuntu
雾沉川2 小时前
Netcatty 开源 SSH 客户端完整技术使用教程
运维·开源·ssh
石小千2 小时前
修改Docker Engine 存储路径
运维·docker·容器