目录

Ansible-自动化运维

Ansible 自动化运维

Ansible架构:

https://i-blog.csdnimg.cn/direct/32dd0cbcf790492e89d8998fc6149b61.png

一.部署主机清单 前期环境准备:

管理端:

192.168.60.128

被管理端:

client1:192.168.60.129

client2:192.168.60.131

1.1 所有被管理端配置ssh密钥   (1.免密登陆   2.允许root远程登陆) 脚本如下:

#!/bin/bash

# 检查 sshpass 是否已安装
if ! command -v sshpass &> /dev/null; then
    echo "请先安装 sshpass 工具!"
    exit 1
fi

# 固定的 IP 地址列表
ip_list="192.168.60.129 192.168.60.131"

# 检查并生成 SSH 密钥
if [ ! -f ~/.ssh/id_rsa ]; then
    echo '----------------'
    echo '1. 创建 key'
    echo '----------------'
    if ! ssh-keygen -f ~/.ssh/id_rsa -t rsa -P ''; then
        echo "生成 SSH 密钥失败!"
        exit 1
    fi
else
    echo "SSH 密钥已存在,跳过生成步骤。"
fi

echo '----------------'
echo '2. 分发 key'
echo '----------------'

for ip in $ip_list; do
    echo "----------------"
    echo "分发 key 到 $ip"
    echo "----------------"
    if sshpass -p2004129 ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root@$ip; then
        echo "分发公钥到 $ip 成功!"
    else
        echo "分发公钥到 $ip 失败!"
    fi
done

运行效果:

https://i-blog.csdnimg.cn/direct/e87c3de766574176a684612cf630475b.png

1.2 控制端安装ansible

2.1安装 EPEL 源: sudo dnf install epel-release

sudo dnf install ansible

ansible –version

ok~~~~~~~~~~~~~~~~~~~~~~~~~~~

https://i-blog.csdnimg.cn/direct/41bf973afdae43758b87333060c03980.png

3.安装完成之后  配置主机清单~   配置文件地址: /etc/ansible/hosts

[Server1]  为组名    将.129   和.131分配在一个组~~~~~~~~~~

https://i-blog.csdnimg.cn/direct/15c9d1b98e1c43958fd09ad76f363a38.png

4.测试使用:

测试1 # ansible Server1 -m ping     //测试主机是否通~~~~~~~~

出现 绿色 就说明通了~~~~~~ https://i-blog.csdnimg.cn/direct/5a82120eaf72466e835779c1ac45933a.png

测试2

ansible Server1 -m command - a ‘hostname’    // -m 指定模块    -a 执行的命令     command命令执行模块

https://i-blog.csdnimg.cn/direct/fd5d894adaab4cf0903a343704473681.png

测试3 # ansible Server1 -m shell -a ‘ip addr | grep inet’

注意command不能识别管道!!!!!!

https://i-blog.csdnimg.cn/direct/746db6282f5f4f28bf2f66d5564d63a6.png

1.3 ansible 核心配置文件:

就最前面这两个

ansible.cfg  # ansible核心配置文件

https://i-blog.csdnimg.cn/direct/223d4203023c447a86f44cfc9585b8c7.png

hosts  #主机清单

如何设置子组(就是将多个组 合并在一个组)

在host文件下这样写:

[data:children]     // children关键字

组名

组名

~n

https://i-blog.csdnimg.cn/direct/ee31c6f6d6624473988d7979222024ae.png

测试一下看

ansible data -m ping

https://i-blog.csdnimg.cn/direct/46e3866300df4eba909c1b4765582508.png

测试所有主机是否ping通

ansible all -m ping

https://i-blog.csdnimg.cn/direct/74b5ec5c20544232bb686ba090c05189.png

ansibel核心模块

https://i-blog.csdnimg.cn/direct/02347cb5fb5c4cc6b6a593ec9ccae24f.png

如何查询命令帮助: ansible-doc -s command

ansible官方文档:

https://i-blog.csdnimg.cn/direct/630fe73287b541fca0185568bf9fccdc.png

模块使用:

二.命令脚本相关模块

1.command 支持简单的命令 不支持管道符号 !!!! 默认模块  不写 也是他

ansible all -m command -a ‘命令’

2.shell模块 支持  一些特殊的符号!

ansible all -m shell -a ‘ip a s ens160 | grep inet’

https://i-blog.csdnimg.cn/direct/9df201f96f73463ea4ed117b66658dc2.png

3.script模块  传输

脚本到被管理端   并

执行

3.1比如我们在管理端写一个安装nmap软件脚本

脚本内容  名称:

https://i-blog.csdnimg.cn/direct/54c6948b85c142c2af26c938e696529d.png

执行命令:

ansible all -m script -a ‘/home/test/script-ans/nmapins.sh’

https://i-blog.csdnimg.cn/direct/ab9b6fff284c44b2829ad31c2b351f74.png

看一下被控端受否安装(直接在管理端测试nmap这个工具)

ansible all -m shell -a ’nmap localhost’

https://i-blog.csdnimg.cn/direct/7aa7991a7070416f92b324c32a94fac3.png

二.文件相关模块

https://i-blog.csdnimg.cn/direct/ead954633f4b42568aa04538893f744a.png

2.1创建目录和文件

https://i-blog.csdnimg.cn/direct/5639bd6cba764c7b8ae0b2f7f8a295f8.png

目录:ansible all -m file -a ‘path=/home/ansible-test state=directory’

https://i-blog.csdnimg.cn/direct/c26c5b7bac5246bfb00fd5dd870b6e80.png

文件:ansible all -m file -a ‘path=/home/ansible-test/hello.txt state=touch’

https://i-blog.csdnimg.cn/direct/d36af26ca34444a6952b4811d2c1f09d.png

2.2创建软连接

ansible all -m file -a ‘src=/home/ansible-test/hello.txt path=/home/test/hello.txt.soft state=link’

https://i-blog.csdnimg.cn/direct/541f50c548f24cb39a0d5f4831d20d6c.png

看看是否成功:ansible all -a ’ls -l /home/test'

https://i-blog.csdnimg.cn/direct/60c3dc60d94748a98c4915d7aff42c7c.png

删除(都是加一个参数就可以 state=ansent )

删除一个文件:ansible all -m file -a ‘path=/home/ansible-test/hello.txt state=absent’

注意是:state=absent   不是 state:absent

https://i-blog.csdnimg.cn/direct/d522b1ae318c452692624f08942387c9.png

案例:创建一个txt文件 所有者是:root   组:root   权限:755

ansible all -m file -a ‘path=/tmp/xxw.txt state=touch group=root owner=root’

https://i-blog.csdnimg.cn/direct/70447900d07e40fbae6c2053b59863af.png

三. 文件传输copy模块

https://i-blog.csdnimg.cn/direct/2564ab521ed344da97489f55aec5718f.png