ansible 001 ansible介绍 原理 主机清单 定义变量 提权与连接
ansible 自动化运维
ansible 部署应用程序 (在操作系统层面之上)
系统初始化过程
主机名,yun源,网络,服务,时间同步,内核参数 (可以在pxe这里完成)
ansible可以方便100多台服务器来变更,不至于pxe重新安装
PXE 预启动的执行环境
PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。
当硬盘没有OS时可以选择
光盘
u盘
网络
启动
网络 (网卡) ip 当前的环境也得有dhcp服务器来分配ip 引导程序 启动 安装系统 脚本 anacoda
anacoda.cfg 为预写配置
主控端安装ansible软件就行
pupput
ruby
saltstack
python
安装包
服务 master与agent对接 (属于saltstack) 客户端服务需要汇报心跳
模块化
ansible
python
安装包
基于ssh服务 (被管的客户端,在主机清单写)
模块化
ssh 加密
telent 被抓包都是明文
配一个aliyun的epel源
下载ansible并写主机清单。来测试
[root@workstation ansible]# cat hosts
192.168.230.165
192.168.230.166
[root@workstation ansible]#

红色为报错

黄色有改动,且成功
使用相应的模块完成会更好 虽然shell是万金油
shell不能保证ansible的幂等性 重复执行效果一样

从上图可以看出差别。user模块发现符合要求,则不在重新创建,而shell重新创建且引发了报错
ansible 基于ssh 所以并发连接会受限,ssh并发1000台,那么ssh就会顶不住
ansible可以多级控制 ansible嵌套ansible下发命令
ansible拥有playbook,按顺序执行指令
配置域名,写主机清单
[root@workstation ansible]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.230.164 workstation.example.com workstation
192.168.230.165 servera.example.com servera
192.168.230.166 servera.example.com serverb
[root@workstation ansible]# vi hosts
[root@workstation ansible]# cat hosts
servera
serverb
[root@workstation ansible]#
[root@workstation ansible]# ansible all --list-hosts
hosts (2):
servera
serverb
[root@workstation ansible]#

遇到此问题,手动接收密钥
查看联通性

成功-k后,短时间内就不需要-k了
我使用ssh的哪个用户登录?
[root@workstation ansible]# ansible all -m shell -a 'whoami' -k
SSH password:
serverb | CHANGED | rc=0 >>
root
servera | CHANGED | rc=0 >>
root
登录后的工作目录为家目录
[root@workstation ansible]# ansible servera -m shell -a 'pwd' -u xiaomao -k
SSH password:
servera | CHANGED | rc=0 >>
/home/xiaomao
[root@workstation ansible]#
使用xiaomao来连接,并且发现家目录为xiaomao
通过家目录来判断当前用户更加靠谱
pwd未切换用户,读不到root的环境变量
补充ce内容
提权之后,角色会从普通用户变为root
[xiaomao@servera ~]$ sudo id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[xiaomao@servera ~]$ id
uid=1000(xiaomao) gid=1000(xiaomao) groups=1000(xiaomao) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[xiaomao@servera ~]$
[xiaomao@servera ~]$ sudo cat /etc/sudoers.d/xiaomao
xiaomao ALL=(ALL) NOPASSWD:ALL
[xiaomao@servera ~]$
ini格式定义变量

YAML格式的静态清单文件
webservers:
hosts:
server[a:b].lab.example.com
vars:
user_name: kevin
dbservers:
hosts:
serverc.lab.example.com:
user_name1: user1
all_servers:
children:
webservers:
dbservers:
vars:
course_name: DO447
ungrouped:
hosts:
servere.lab.example.com
vars:
course_day: 4
[student@workstat
ansible-inventory --yaml -i inventory-bak --list --output inventory
ini格式转换为yaml
动态清单(知道可以用python写这个东西就行)

定义变量
1> 在命令行中输入变量
[student@workstation ansible]$ ansible-playbook -e user_name=kevin playbook.yml
-e 参数指定
2> 定义主机和主机组的变量
1~ 在资产清单定义: 第一个例子
2~ 通过特定的目录来定义
[student@workstation ansible]$ mkdir group_vars
[student@workstation ansible]$ mkdir host_vars
[student@workstation ansible]$ tree group_vars/
group_vars/
├── dbservers
└── webservers
这两个文件书写格式
web_pack: abc
在group_vars内的文件名就是你的组名
[student@workstation ansible]$ ansible -m debug -a "var=web_pack" webservers
[student@workstation ansible]$ ansible -m debug -a "var=db_version" dbservers
[student@workstation ansible]$ tree host_vars/
host_vars/
├── servera.lab.example.com
└── serverb.lab.example.com
[student@workstation ansible]$ ansible -m debug -a "var=server_name" servera.lab.example.com
servera.lab.example.com | SUCCESS => {
"server_name": "servera"
}
host_vars内的文件名就是你在资产清单中定义的inventory_name
3> Role定义的变量
[student@workstation ansible]$ cat roles/httpd/vars/main.yml
---
# vars file for httpd
server_port: 8080
pack_name: httpd
4> 在Play中定义:
1~ 通过关键字来定义
---
- name: debug var
hosts: webservers
vars:
username: user1
vars_files:
- vars
tasks:
- name: debug vars
debug:
msg: "{{ username }} {{ age }}"
2~ 在tasks中定义var
---
- name: debug var
hosts: webservers
tasks:
- name: debug vars
vars:
username: user1
age: 50
debug:
msg: "{{ username }} {{ age }}"
~
在一个任务中定义的变量,不可以在其他任务去调用
---
- name: debug var
hosts: webservers
tasks:
- name: debug vars
set_fact:
username: user1
age: 50
- name: copy content
copy:
content: "{{ username }} {{ age }}\n"
dest: /root/kevin
3~ 在Play中也可以通过register来注册变量
提权与连接
1~ 在ansible的配置文件中,提升权限
[defaults]
remote_user = devops
inventory = inventory
ask_pass = false
roles_path = roles
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
2~ 在Play中提升权限
---
- name: install httpd
become: true
hosts: webservers
tasks:
- name: install httpd
yum:
name: httpd
state: present
---
如果是在task中替身权限,那么后续中的任务,就没有提升了
- name: install httpd
hosts: webservers
tasks:
- name: install httpd
become: true
yum:
name: httpd
state: present
在block中提升权限
---
- name: install httpd
hosts: dbservers
tasks:
- block:
- name: install httpd
yum:
name: httpd
state: present
- name: prepare webcontent
copy:
content: "Hello,World\n"
dest: /var/www/html/index.html
become: true
在Role中提升权限
- name: Example play with one role
hosts: localhost
roles:
- role: role-name
become: true
通过变量来提升
ansible_become = true
ansible_become_method = sudo
ansible_become_user = root
ansible_become_pass = false
[privilege_escalation]
become=False
become_method=sudo
become_user=root
become_ask_pass=False
[student@workstation ansible]$ cat inventory
[webservers]
servera.lab.example.com ansible_become=true
[student@workstation ansible]$ cat inventory
[webservers]
servera.lab.example.com ansible_become=true ansible_become_method=sudo ansible_become_user=root
[dbservers]
serverb.lab.example.com
#########
ansible_user
[webservers]
servera.lab.example.com ansible_become=true ansible_become_method=sudo ansible_become_user=root ansible_user=devops
[dbservers]
serverb.lab.example.com
类似于你在在配置文件中的remote_user
ansible_ssh_host #用于指定被管理的主机的真实IP
ansible_ssh_port #用于指定连接到被管理主机的ssh端口号,默认是22
ansible_ssh_user #ssh连接时默认使用的用户名
# 特定ssh连接
ansible_connection #SSH连接的类型:local, ssh, paramiko,在ansible 1.2 之前默认是paramiko,后来智能选择,优先使用基于ControlPersist的ssh(如果支持的话)
ansible_ssh_pass #ssh连接时的密码
ansible_ssh_private_key_file #秘钥文件路径,如果不想使用ssh-agent管理秘钥文件时可以使用此选项
ansible_ssh_executable #如果ssh指令不在默认路径当中,可以使用该变量来定义其路径
# 特权升级
ansible_become #相当于ansible_sudo或者ansible_su,允许强制特权升级
ansible_become_user #通过特权升级到的用户,相当于ansible_sudo_user或者ansible_su_user
ansible_become_pass # 提升特权时,如果需要密码的话,可以通过该变量指定,相当于ansible_sudo_pass或者ansible_su_pass
ansible_sudo_exec #如果sudo命令不在默认路径,需要指定sudo命令路径
# 远程主机环境参数
ansible_shell_executable # 设置目标机上使用的shell,默认为/bin/sh
ansible_python_interpreter #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl 的路径
ansible_*_interpreter #其他解释器路径,用法与ansible_python_interpreter类似,这里"*"可以是ruby或才perl等其他语言
ansible 001 ansible介绍 原理 主机清单 定义变量 提权与连接的更多相关文章
- Ansible主机清单Inventory文件hosts
Ansible主机清单Inventory文件hosts 发表于 2017-05-14 | 分类于 运维相关 , Ansible | | 阅读次数 4638 | 字数统计 1,442 | 阅读时长预计 ...
- 1、Ansible初识简要介绍及安装
1.Ansible简介 1.1 Ansible介绍 Ansible 是一个简单的自动化运维管理工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...
- Ansible2:主机清单【转】
Ansible 通过读取默认的主机清单配置/etc/ansible/hosts,可以同时连接到多个远程主机上执行任务, 默认路径可以通过修改 ansible.cfg 的 hostfile 参数指定路径 ...
- Ansible-免密登录与主机清单Inventory
Ansible的指定用户与密码登录.免密登录.指定ssh端口以及主机清单Inventory配置 在实际使用中并不需要对ansible配置进行修改,或者说只有需要的时候才修改ansible配置. 添加用 ...
- Windows原理深入学习系列-Windows内核提权
这是[信安成长计划]的第 22 篇文章 0x00 目录 0x01 介绍 0x02 替换 Token 0x03 编辑 ACL 0x04 修改 Privileges 0x05 参考文章 继续纠正网上文章中 ...
- Ansible安装部署和常用命令,及其主机清单inventory(二)
1.ansible的安装方式 1.1使用yum源安装 yum install ansible -y 1.2使用rpm包安装 https://dl.fedoraproject.org/pub/epel/ ...
- 【Ansible 文档】【译文】主机清单文件
Inventory 主机清单文件 Ansible 可以对你的基础设施中多个主机系统同时进行操作.通过选择在Ansible的inventory列出的一部分主机来实现.inventory默认保存在/etc ...
- Ansible 小手册系列 五(inventory 主机清单)
Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts 主机清单示例 mail.example. ...
- (2)ansible主机清单文件inventory
1)inventory作用 作用:通常用于定义要管理主机的认证信息,例如ssh登录用户名,密码等相关信息 缺省文件:/etc/ansible/hosts 2)定义主机组方式 #vim /etc/ans ...
- 细说Ansible主机清单inventory
Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 关于Ansible是 ...
随机推荐
- 保姆教程系列:小白也能看懂的 Linux 挂载磁盘实操
!!!是的没错,胖友们,保姆教程系列又更新了!!! @ 目录 前言 简介 一.磁盘分区 二.文件系统 三.实际操作 1. 使用lsblk命令查看新加入的磁盘信息 2. 使用fdisk或者cfdisk分 ...
- kubernetes pod升级与回滚扩容与缩容
运行一个容器: apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revisio ...
- 记第一次用python写界面
花了两三个小时学了Tkinter,做了一个将数据绘制成图的小工具. 1. 获取路径下的所有文件or获取路径下指定名称的文件 1.1 打开文件 //1. 用来放文本框中的文字filename = St ...
- 易盾逆向分析-知乎login
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...
- INFINI Labs 产品更新 | Easysearch 1.8.0 发布数据写入限流功能
INFINI Labs 产品又更新啦~,包括 Easysearch v1.8.0.Gateway.Console.Agent.Loadgen v1.25.0.本次各产品更新了很多亮点功能,如 Easy ...
- INFINI Labs 产品更新 | 统一版本号 1.22.0
INFINI Labs 产品又更新啦~,包括 Console,Gateway,Loadgen,Agent 1.22.0.为了避免版本不同带来的困扰,以后发布均统一版本号,此次版本重点修复历史遗留 Bu ...
- EF 字段 4位小数 四位小数
默认情况下只能保存2位小数.如果有字段需要4位小数则: 在OnModelCreating方法中添加一行: modelBuilder.Entity<SissMerchantBillRate> ...
- ssh基础
SSH安全登录 机器准备 什么是SSH SSH 或 Secure Shell 协议是一种远程管理协议,允许用户通过 Internet 访问.控制和修改其远程服务器. SSH 服务是作为未加密 Teln ...
- Vue3:项目创建
Vue 3 相对于 Vue 2 带来了许多改进和优点,这些改进主要是为了提高性能.开发体验和可维护性.但是对于创建项目,Vue3也可以采用跟Vue2相同的方式. 使用CLI创建 1. 安装Vue CL ...
- 如何基于Perl实现批量蛋白名转换为基因名?以做后续GO与KEGG分析
众所周知,在完成蛋白组学组间差异蛋白筛选后,往往要做GO与KEGG功能富集分析,这就需要我们首先将蛋白名转换为基因名,或者找出基因ID.将蛋白名转化为基因名可能涉及不同的转换工具或数据库,这里有几种常 ...