学习linux的第七十二天

本文介绍了自动化运维工具Ansible的原理和特点,包括其基于Python的开发背景、工作方式和核心组件。详细讲述了Ansible的安装过程,通过生成和拷贝SSH密钥实现无密码登录,以及配置主机组。此外,还演示了如何使用Ansible进行远程执行命令、拷贝文件和目录以及执行脚本,最后提到了command和shell模块的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ansible简介

在这里插入图片描述
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供
一种框架。主要包括:
连接插件connection plugins:负责和被监控端实现通信;
host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
各种模块核心模块、command模块、自定义模块;
借助于插件完成记录日志邮件等功能;
playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
ansible特点:
不需要安装客户端,通过sshd去通信
基于模块工作,模块可以由任何语言开发
不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读
安装十分简单,centos上可直接yum安装
有提供UI(浏览器图形化)www.ansible.com/tower , 收费的
ansible官网:https://www.ansible.com/
ansible官方文档地址:http://docs.ansible.com/ansible/latest/index.html
ansible在github地址:https://github.com/ansible/ansible
一本不错的ansible入门电子书:https://ansible-book.gitbooks.io/ansible-first-book/

ansible安装

在这里插入图片描述
环境:
192.168.70.128 KXLZQ
192.168.70.129 XXQ
安装:
只需要在服务端上安装ansible:yum install -y ansible
[root@KXLZQ ~]# yum list |grep ansible # 可以看到自带源里就有2.4版本的ansible
ansible.noarch 2.4.2.0-2.el7 extras
ansible-doc.noarch 2.4.2.0-2.el7 extras
[root@KXLZQ ~]# yum install -y ansible
使用ssh-keygen命令生成密钥对:
[root@KXLZQ ~]# cd .ssh/
[root@KXLZQ .ssh]# ssh-keygen -t rsa # -t指定密钥类型
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:QfYYQO7KFX3lvBa8X/bUKzB0Nz71soQjF9Ri079pEbo root@KXLZQ
The key’s randomart image is:
±–[RSA 2048]----+
| .o.+ oo |
| . + + + o. |
| o + oo
+.+o|
| . . o. .Bo.*|
| o S .oB +oX|
| . o +oE X+|
| o .+…|
| . |
| |
±—[SHA256]-----+

建立服务端与客户端的连接,也就是配置密钥认证的SSH连接:
[root@KXLZQ .ssh]# ssh-copy-id root@192.168.70.129 # 拷贝ssh key到客户端
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/root/.ssh/id_rsa.pub”
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already
installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed – if you are prompted now it is to install
the new keys
root@192.168.70.129’s password:
Number of key(s) added: 1
Now try logging into the machine, with: “ssh ‘root@192.168.70.129’”
and check to make sure that only the key(s) you wanted were added.
设置ssh的时候不会提示是否保存key
[root@KXLZQ .ssh]# ssh-keyscan 192.168.70.129 >> ~/.ssh/known_hosts

**#192.168.70.129:22 SSH-2.0-OpenSSH_7.4
# 192.168.70.129:22 SSH-2.0-OpenSSH_7.4
# 192.168.70.129:22 SSH-2.0-OpenSSH_7.4

测试在服务端上能否通过密钥登录客户端
[root@KXLZQ .ssh]# ssh root@192.168.70.129
Last login: Fri Oct 19 13:54:13 2019 from 192.168.70.1
[root@XXQ ~]# logout
Connection to 192.168.70.129 closed
编辑服务端上的配置文件,配置远程主机组:
[root@KXLZQ ~]# vim /etc/ansible/hosts # 在文件末尾增加以下内容
[testhost] # 主机组的名称,可自定义,以下的ip为该组内机器的ip
192.168.70.129

ansible远程执行命令

在这里插入图片描述
完成了ssh密钥认证以及主机组的配置之后就可以通过ansible对客户端远程执行命令
通过主机组执行:
[root@KXLZQ ~]# ansible testhost -m command -a ‘w’
192.168.70.129 | SUCCESS | rc=0 >>
15:54:52 up 2:01, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.70.1 13:54 32:52 0.04s 0.04s -bash
root pts/1 192.168.70.128 15:54 0.00s 0.13s 0.01s w
[root@KXLZQ ~]# ansible testhost -m command -a ‘hostname’
192.168.70.129 | SUCCESS | rc=0 >>
XXQ
通过IP地址执行:
[root@KXLZQ ~]# ansible 192.168.70.129 -m command -a ‘hostname’
192.168.70.129 | SUCCESS | rc=0 >>
XXQ
注:
ansible 后面跟的是需要远程执行命令的机器,可以是一个主机组,可以是某个指定的ip或者主机名,如果使用主机名的话,需要先配置hosts
-m选项用于指定使用某个模块,在这里我们指定的是command 模块,这个模块可以用于远程执行命令
-a选项用于指定需要执行的命令,命令需要用单引号引起来
除了使用command模块外,还可以使用shell模块来实现远程执行命令
[root@KXLZQ ~]# ansible testhost -m shell -a ‘w’
192.168.70.129 | SUCCESS | rc=0 >>
15:59:36 up 2:06, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.222.1 13:54 37:36 0.04s 0.04s -bash
root pts/1 192.168.70.128 15:59 0.00s 0.07s 0.01s w
command与shell的区别:command模块是用于执行单条命令;而shell模块可以用于执行单条命令,也可以用于执行脚本。

ansible拷贝文件或目录

在这里插入图片描述
拷贝目录:
[root@KXLZQ ~]# ansible testhost -m copy -a “src=/etc/ansible dest=/tmp/ansibletest owner=root
group=root mode=0755”
192.168.70.129 | SUCCESS => {
“changed”: true,
“dest”: “/tmp/ansibletest/”,
“src”: “/etc/ansible”
}
注:
src指定来源目录路径
dest指定目标机器存储该目录的路径
owner指定目录的属主
group指定目录的属组
mode指定目录的权限
源目录会放到目标目录下面去,如果目标指定的目录不存在,它会自动创建。如果拷贝的是文件,dest指定的名字和源如果不同,并且它不是已经存在的目录,相当于拷贝过去后又重命名。但相反,如果dest是目标机器上已经存在的目录,则会直接把文件拷贝到该目录下面
查看客户端拷贝的目录:
[root@XXQ ~]# ls /tmp/ansibletest
ansible
[root@XXQ ~]# ls /tmp/ansibletest/ansible/
ansible.cfg hosts roles
拷贝文件:
[root@KXLZQ ~]# ansible testhost -m copy -a “src=/etc/passwd dest=/tmp/passwd”
192.168.70.129 | SUCCESS => {
“changed”: true,
“checksum”: “7b95e8a3e5794f00aab8721e93bcd504a18aa0a0”,
“dest”: “/tmp/passwd”,
“gid”: 0,
“group”: “root”,
“md5sum”: “92191c868c0df95d909fa2983ee0eb9c”,
“mode”: “0644”,
“owner”: “root”,
“secontext”: “unconfined_u:object_r:admin_home_t:s0”,
“size”: 846,
“src”: “/root/.ansible/tmp/ansible-tmp-1539936535.44-243048400644709/source”,
“state”: “file”,
“uid”: 0
}
注:
src指定来源目录路径
dest指定目标机器存储该目录的路径
与拷贝目录同理,如果目标机器上存在一个/tmp/passwd目录,则会在/tmp/passwd目录下面创建passwd文件。
查看客户端接收文件:
[root@XXQ ~]# ll /tmp/passwd
-rw-r–r--. 1 root root 846 12月 30 16:08 /tmp/passwd

ansible远程执行脚本

在这里插入图片描述
服务端上创建shell脚本测试:
[root@KXLZQ ~]# vim /tmp/test.sh #添加脚本内容
#!/bin/bash
echo date > /tmp/ansible_test.txt
脚本分发到远程机器上:
[root@KXLZQ ~]# ansible testhost -m copy -a “src=/tmp/test.sh dest=/tmp/test.sh mode=0755”
192.168.70.129 | SUCCESS => {
“changed”: true,
“checksum”: “1a6e4af02dba1bda6fc8e23031d4447efeba0ade”,
“dest”: “/tmp/test.sh”,
“gid”: 0,
“group”: “root”,
“md5sum”: “edfaa4371316af8c5ba354e708fe8a97”,
“mode”: “0755”,
“owner”: “root”,
“secontext”: “unconfined_u:object_r:admin_home_t:s0”,
“size”: 48,
“src”: “/root/.ansible/tmp/ansible-tmp-1539936986.48-59618023407009/source”,
“state”: “file”,
“uid”: 0
}
注:
脚本文件需要给755的权限,不然无法被直接执行。
通过shell模块执行远程机器上的shell脚本:
[root@KXLZQ ~]# ansible testhost -m shell -a “/tmp/test.sh”
192.168.70.129 | SUCCESS | rc=0 >>
查看客户端是否执行:
[root@XXQ ~]# cat /tmp/ansible_test.txt
2019年 12月 30日 星期一 16:19:33 CST
除此之外shell模块可以使用管道符,而command模块则不支持使用管道符:
[root@KXLZQ ~]# ansible testhost -m shell -a “cat /etc/passwd|wc -l”
192.168.70.129 | SUCCESS | rc=0 >>
21

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值