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 [email protected]

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

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

复制代码
ssh-copy-id [email protected]

只要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

ly[2: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"

删除刚刚添加的用户

相关推荐
懒羊羊大王呀3 分钟前
Ubuntu20.04中MySQL的安装和配置
linux·mysql·ubuntu
浅安的邂逅9 分钟前
Ubuntu apt-get安装-报错:尝试“apt --fix-broken install”有未能满足的依赖关系,几种解决办法
linux·ubuntu·apt install
鸡鸭扣23 分钟前
25年春招:米哈游运维开发一面总结
运维·面试·求职招聘·运维开发·面经·sre·米哈游
Auv开心23 分钟前
ubuntu22.04和ubuntu20.04 的ssh配置不然repo init失败
运维·ssh
SZ17011023137 分钟前
IGP(Interior Gateway Protocol,内部网关协议)
运维·服务器·gateway
moxiaoran57531 小时前
Spring Cloud Gateway 动态路由实现方案
运维·服务器·前端
运维日常手记1 小时前
最新1.33.1 k8s高可用集群搭建(免翻墙)
运维
爱瑞瑞1 小时前
🐧深入浅出的认识 Linux 指令
linux·shell
星哥说事1 小时前
开源综合性网络安全检测和运维工具-TscanClient
运维·web安全·开源
ajassi20002 小时前
开源 java android app 开发(十一)调试、发布
android·java·linux·开源