首页 > 其他分享 >Ansible快速入门

Ansible快速入门

时间:2023-04-30 20:45:16浏览次数:46  
标签:入门 快速 ansible etc manager Ansible cfg root

Ansible快速入门

1.1 什么是Ansible

Ansible是一个IT自动化的配置管理工具,自动化主要体现在:

Ansible集成了丰富模块,以及强大的功能组件,可以通过一个命令行完成一系列的操作。进而能减少我们重复性的工作,以提高工作的效率。
image

1.2 Ansible主要功能

  • 批量执行远程命令,可以对N多台主机同时进行命令的执行。
  • 批量配置软件服务,可以进行自动化的方式配置和管理服务。
  • 实现软件开发功能,jumpserver底层使用ansible来实现的自动化管理。
  • 编排高级的IT任务,AnsiblePlaybook是一门编程语言,可以用来描绘一套IT架构。

1.3 Ansible的特点

  • 容易学习:无代理,不像saltstack既要学客户端与服务端,还需要学习客户端与服务端中间通讯协议;
  • 操作灵活:Ansible有较多的模块,提供了丰富的功能、playbook则提供类似于编程语言的复杂功能;
  • 简单易用:体现在Ansible一个命令可以完成很多事情;
  • 安全可靠:因为Ansible使用了SSH协议进行通讯,既稳定也安全;
  • 移植性高:可以将写好的playbook拷贝至任意机器进行执行;
  • 幂等性:一个任务执行1遍和执行n遍效果一样,不会因为重复执行带来意外情况;

1.4 Ansible基础架构

Ansible 架构中的控制节点被控制节点inventroyad-hocplaybookConnection Protocol是什么?
image

ProcessOn: Ansible 架构流程图

image

2. Ansible安装与配置

2.1 rpm安装

[root@manager ~]# wget -O /etc/yum.repos.d/epel.repo
http: mirrors.aliyun.com/repo/epel-7.repo
[root@manager ~]# yum install ansible -y

2.2 pip安装

[root@manager ~]# yum install python3 python3-devel python3-pip -y
[root@manager ~]# pip3 install =upgrade pip -i https: pypi.douban.com/simple/
[root@manager ~]# pip3 install ansible -i https: pypi.douban.com/simple/
[root@manger ~]# /usr/local/bin/ansible --version

2.3确认安装

方式一、检查Ansible版本

[root@manager ~]# ansible =version ansible 2.10.5
config file = None
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location =
/usr/local/lib/python3.6/site-packages/ansible executable location = /usr/local/bin/ansible python version = 3.6.8 (default, Nov 16 2020,
16:55:22) [GCC 6.8.5 20150623 (Red Hat 6.8.5-44)]

方式二、测试Ansible是否可用

[root@manager ~]# ansible localhost -m ping
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

3. Ansible配置解读

3.1 Ansible配置路径

  • /etc/ansible/ansible.cfg :主配置文件,配置ansible工作特性
  • /etc/ansible/hosts :配置主机清单文件
  • /etc/ansible/roles/ :存放ansible角色的目录

3.2 Ansible主配置文件

Ansible 的主配置文件存在/etc/anible/ansible.cfg ,其中大部分的配置内容无需进行修改;

[root@manager ~]# cat /etc/ansible/ansible.cfg
[defaults]
#inventory = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = ~/.ansible/tmp #临时py文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp #本机的临时执行目录
#forks = 5 #默认并发数
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True #每次执行是否询问sudo的ssh密码
#ask_pass = True #每次执行是否询问ssh密码
#remote_port = 22 #远程主机端口
host_key_checking = False #检查对应服务器的host_key,建议取消
log_path = /var/log/ansible.log #ansible日志,建议启用

[privilege_escalation] #如果是普通用户则需要配置提权
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False

3.3 Ansible配置优先级

  • Ansible 的配置文件可以存放在任何位置,但配置文件有读取顺序,查找顺序如下:
    -- 1、最先查找 $ANSIBLE_CONFIG 变量
    -- 2、其次查找当前目录下 ansible.cfg
    -- 3、然后查找用户家目录下的 .ansible.cfg
    -- 4、最后查找 /etc/ansible/ansible.cfg
  • 通过命令行操作演示,验证结论;
配置文件的优先级:
# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first

第一步读取:ANSIBLE_CONFIG
第二步读取:当前项目目录下的ansible.cfg
第三步读取:当前用户家目录下的 .ansible.cfg 
第四步读取: /etc/ansible/ansible.cfg

[root@manager ~]# export ANSIBLE_CONFIG=/tmp/ansible.cfg
[root@manager ~]# touch /tmp/ansible.cfg
[root@manager ~]# ansible --version
ansible 2.9.25
  config file = /tmp/ansible.cfg
[root@manager ~]# unset ANSIBLE_CONFIG	# 取消

为项目单独定义配置文件,非常的重要;
[root@manager ~]# mkdir project1
[root@manager ~]# cd project1/
[root@manager project1]# touch ansible.cfg
[root@manager project1]# ansible --version
ansible 2.9.25
  config file = /root/project1/ansible.cfg

# 为当前执行的用户家目录植入一个配置文件;
[root@manager ~]# touch ~/.ansible.cfg
[root@manager ~]# ansible --version
ansible 2.9.25
  config file = /root/.ansible.cfg

# 默认的配置文件加载路径,优先级是最低的
[root@manager project1]# rm -f ~/.ansible.cfg
[root@manager ~]# ansible --version
ansible 2.9.25
  config file = /etc/ansible/ansible.cfg

3.4 普通用户管理被控端

场景说明:ansible 使用 oldxu 普通用户统一管理所有的被控端节点;
1.首先控制端,被控端,都需要有 oldxu 用户;

[root@manager ~]# useradd oldxu
[root@manager ~]# echo "123" | passwd --stdin oldxu

2.将控制端 oldxu 用户的公钥推送到被控端 oldxu 用户下,使普通用户能进行免密码登录;

[root@manager ~]# su - oldxu
[oldxu@manager ~]$ ssh-keygen -t rsa -N "" -f
~/.ssh/id_rsa
[oldxu@manager ~]$ ssh-copy-id -i ~/.ssh/id.pub
oldxu@IP

3.所有主机的 oldxu 用户都必须添加 sudo 权限。

[root@manager ~]# visudo
oldxu ALL=(ALL) NOPASSWD: ALL

4.修改控制端 /etc/ansible/ansible.cfg 主配置文件,配置普通用户提权;

[root@manager ~]# vim /etc/ansible/ansible.cfg
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

5.使用 oldxu 用户测试是否能执行任务;
先上 playbook

- hosts: all
  vars:
    user: test
    password: "$6$rounds=100000$O2BHfT2XIF6oDb9w$8Hhv4vOrLN6JF/nRVYDd8zZdnn9TNkQutyYYywIcPF2kRiHgkwAjqHIN7sDUkd1DcjLRABWT9ULHZPBOF2bZS/"
  remote_user: root
  tasks:
  - name: Add user {{ user }}
    user: name={{user}} comment="ceph user" password={{ password }}
  - name: Config /etc/sudoers
    lineinfile: dest=/etc/sudoers state=present  line='{{item}}' validate='visudo -cf %s'
    with_items:
           - "{{ user}} ALL=(ALL) NOPASSWD: ALL"
           - "Defaults: {{user}}  !requiretty"

此 playbook 将添加一个具有 sudo 权限的 test 用户 密码为 password

更改用户只用更改 vars: 中的 user 即可

生成密码:

#pip install passlib
python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt(getpass.getpass())"

输入密码后确认

会生成一长串字符替换 playbook 中的即可

标签:入门,快速,ansible,etc,manager,Ansible,cfg,root
From: https://www.cnblogs.com/jpSpaceX/p/17365654.html

相关文章

  • 快速上手Linux核心命令(十):Linux安装软件
    目录前言rpmrpm包管理器yum自动化RPM包管理工具前言这期呢主要说一说Linux中包软件管理相关命令,这一期的命令虽然只有两个。但软件包的安装和卸载都是我们平常最常用的,需要熟练掌握。rpm和yum是CentOS主要的包软件管理。两个命令各有用处,①yum需要互联网,yum会去网上的yum......
  • 算法入门
    算法介绍算法(Algorithm):⼀个计算过程,解决问题的⽅法NiklausWirth:“程序=数据结构+算法”时间复杂度简单总结时间复杂度是⽤来估计算法运⾏时间的⼀个式⼦(单位)。⼀般来说,时间复杂度⾼的算法⽐复杂度低的算法慢。常⻅的时间复杂度(按效率排序):O(1)<O(logn)<O(n)<O(nlo......
  • 使用docker快速安装mongodb.md
    1.拉取mongodb镜像dockerpullmongo2.创建文件夹mkdir-p/home/mongo/conf/mkdir-p/home/mongo/data/mkdir-p/home/mongo/logs/3.新增mongod.conf文件cd/home/mongo/conf&&vimongod.confmongod.conf文件内容:#数据库文件存储位置dbpath=/data/db#log文......
  • 使用docker快速安装mysql.md
    1.拉取mysql镜像dockerpullmysql:8.0.182.docker容器构建和运行mysqldockerrun--namemysql\ -p3306:3306\-eMYSQL_ROOT_PASSWORD=123456\ -v/home/mysql/data:/var/lib/mysql:rw\-v/home/mysql/mysql-files:/var/lib/mysql-files:rw\-v/home/......
  • Linux入门操作基础
    一、配置虚拟机NAT网络连接查看vmware的NAT网络默认配置vmwarestation软件点击上方“编辑”,选择“虚拟网络编辑器”找到vmnet10,是NAT模式,子网地址是172.25.2.0,子网掩码是:255.255.255.0.再点击“NAT设置”,可看到它的网关:172.25.2.2配置当前虚拟机的网络配置vmwarestation......
  • 《CTFshow-Web入门》07. Web 61~70
    目录web61~65题解web66知识点题解web67知识点题解web68知识点题解web69知识点题解web70知识点题解ctf-web入门web61~65题解这几个题都和web58一样。可能内部禁用的函数不一样吧。但payload都差不多。不多解释了。以下解法随便挑一个即可。可能不同题会有部分函数被......
  • Mysql入门
    Mysql入门1.数据库介绍数据库概念数据库本质上是一个文件系统,是存储数据的仓库。数据库作用数据库用来管理用户的数据,方便用户对数据进行增删改查的一些操作。数据库分类数据库分为关系型数据库(SQL)和非关系型数据库(NOSQL)常见的关系型数据库:MySQL、SQLServer、Oracl......
  • Kubernetes从入门到精通 集群安装
    kubernetes集群安装一准备集群镜像从阿里云镜像仓库拉镜像标签改名#在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看[root@master~]#kubeadmconfigimageslist#下载镜像#此镜像kubernetes的仓库中,由于网络......
  • Mysql入门
    Mysql入门数据库介绍数据库概念数据库本质上是一个文件系统,是存储数据的仓库。数据库作用数据库用来管理用户的数据,方便用户对数据进行增删改查的一些操作。数据库分类数据库分为关系型数据库(SQL)和非关系型数据库(NOSQL)常见的关系型数据库:MySQL、SQLServer、Oracle......
  • Nginx 入门实战(2)--简单使用
    本文主要介绍Nginx的实际使用,文中所使用到的软件版本:Centos7.9.2009、Nginx1.22.1。1、环境准备这里主要演示使用Nginx代理Http及TCP应用,环境信息如下:主机用途Http端口TCP端口10.49.196.30部署Http、TCP应用8080909010.49.196.31部署Http、TCP......