ansible的安装与使用
ansible的特点:
1. 基于ssh运行
2. 无需客户端
安装ansible
这里提供四种安装方式,根据自己的需要任选一种即可
1.1使用yum安装
yum install epel-release -y
yum install ansible -y
1.2 使用pip安装
pip install ansible
如果没pip,需先安装好pip.方法如下:
yum install python-setuptools
easy_install pip
1.3 源码安装pip
准备工具
yum install git python-setuptools gcc python-devel -y
获取源码
git clone https://github.com/ansible/ansible
安装ansible
cd ansible
python setup.py install
1.4 brew安装
在macos下,可使用brew安装
brew install ansible
配置服务器
ansible通过文件来定义你要管理的主机,也就是说把你需要的管理的主机ip写到一个文件中即可。
这个文件一般名为hosts,它可以放在多个路径下,也可以自定义名称和路径。
默认我们用/etc/ansible/hosts这个文件即可
如果是macos 10 以上的系统,默认是没有权限写/etc/的,可以通过自定义配置来添加hosts文件
在~下添加.ansible.cfg文件,指定hosts文件的路径,内容如下
[defaults]
hostfile = /usr/local/etc/ansible/hosts
- 1
- 2
hosts文件的格式为:
[webservers]
10.2.2.121
10.2.2.122
- 1
- 2
- 3
这里webservers是主机组的名称,10.2.2.121和10.2.2.122就是具体的服务器ip了
按照这个格式来自定义自己要管理的主机和主机组即可
如我想定义一组名称test的主机,ip分别是10.2.1.201,10.2.1.202
格式如下
[test]
10.2.1.201
10.2.1.202
- 1
- 2
- 3
默认ssh端口是22,如果主机端口号是其他的,在ip后加:端口号即可,如10.2.1.203的端口是2211,属于test组,格式如下:
[test]
10.2.1.201
10.2.1.202
10.2.1.203:2211
- 1
- 2
- 3
- 4
如果要定义登录机器的用户名和密码,比如10.2.1.204的用户名是test,密码是admin@test,端口是2244,
[test]
10.2.1.201
10.2.1.202
10.2.1.203:2211
10.2.1.204:2244 ansible_ssh_user=test ansible_ssh_pass=admin@test
- 1
- 2
- 3
- 4
- 5
还可以定义主机的别名,如
[test]
web-01 ansible_host=10.2.1.205 ansible_ssh_user=test ansible_ssh_pass=admin@test ansible_ssh_port=2233
- 1
- 2
建议使用免密码登录来管理服务器,在ansible的服务器上配置一套ssh的key,通过ssh-copy-id把公钥分发到要管理的服务器上。具体步骤如下:
1.使用ssh-keygen产生ssh密钥
[root@test-201 ~]# ssh-keygen
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:
dd:20:23:7c:1a:2e:01:bf:b1:67:7a:08:87:5f:e6:7e root@test-201
The key’s randomart image is:
+–[ RSA 2048]—-+
| . |
| o . |
| + + + . |
| . * = + o |
| o = B S . . |
| + X |
| + o |
| o E |
| .. |
+—————–+
2.将公钥发送到要管理的服务器
使用ssh-copy-id命令
比如要发送到10.2.31.202,使用如下命令:
[root@test-201 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 10.2.31.202
root@10.2.31.202’s password:
Now try logging into the machine, with “ssh ‘10.2.31.202’”, and check in:
.ssh/authorized_keys
to make sure we haven’t added extra keys that you weren’t expecting.
3.将公钥批量发送到要管理的服务器
如果你有100台服务器初始化了,手动发key肯定很累的,如果你这100台机器密码一致,可以通过ansible的authorized_key模块来实现批量发送,命令如下
ansible test --ask-pass -u 用户名 -m authorized_key -a "user=用户名 key='$(cat ~/.ssh/id_rsa.pub)'"
- 1
之后输入机器的密码即可批量发送了。
使用ansible
命令格式如下:
ansible + 主机组名称 + -m + 模块名称 + -a + 参数
主机组名称,即hosts中定义的主机组名称
-m 指使用模块,后加指定的模块名称
-a 指传给模块的参数
在不指定模块时,默认调用command模块。
如我们想看下test组上的服务器的/tmp下面有哪些文件,可以使用如下命令
ansible test -a “ls /tmp”
[root@test-201 ~]# ansible test -a "ls /tmp"
10.2.31.203 | SUCCESS | rc=0 >>
ansible_EMEGZI
testabcdefg
- 1
- 2
- 3
- 4
我们可以使用copy模块,将本地文件发送到目标服务器上,如:
ansible test -m copy -a “src=/root/install.log dest=/tmp”
这个命令是将本地的/root/install.log发送到test组的/tmp下,执行的效果如下:
[root@test-201 ~]# ansible test -m copy -a "src=/root/install.log dest=/tmp"
10.2.31.203 | SUCCESS => {
"changed": true,
"checksum": "114ee153946d9cd2e690c405e5796a4fcc400542",
"dest": "/tmp/install.log",
"gid": 0,
"group": "root",
"md5sum": "17b18780156a31a65d62a324110d686e",
"mode": "0644",
"owner": "root",
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 43688,
"src": "/root/.ansible/tmp/ansible-tmp-1466157410.68-191787255687953/source",
"state": "file",
"uid": 0
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
你可以使用ansible-doc –list查看当前的所有模块
[root@test-201 ~]# ansible-doc --list
….
….
authorized_key Adds or removes an SSH authorized key
azure create or terminate a virtual machine in azure
azure_rm_deployment Create or destroy Azure Resource Manager template deployments
azure_rm_networkinterface Manage Azure network interfaces.
azure_rm_networkinterface_facts Get network interface facts.
azure_rm_publicipaddress Manage Azure Public IP Addresses.
azure_rm_publicipaddress_facts Get public IP facts.
azure_rm_resourcegroup Manage Azure resource groups.
azure_rm_resourcegroup_facts Get resource group facts.
azure_rm_securitygroup Manage Azure network security groups.
….
…
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
使用ansible-doc + 模块名,可以看具体某个模块的使用方法,如查看yum模块的使用方法
ansible-doc yum
[root@test-201 ~]# ansible-doc yum
> YUM
Installs, upgrade, removes, and lists packages and groups with the `yum' package manager.
......
- 1
- 2
- 3
- 4
- 5
- 6
ansible自带了很多丰富的模块,详细请看:
http://docs.ansible.com/ansible/list_of_all_modules.html
Playbooks
顾名思义,playbooks就像剧本一样,将你要做的事情先定义好,然后通过它来执行。这也是ansible一个强大的地方,可以通过它来做些复杂的应用部署。
举个例子:
[root@test-201 ~]# cat test-playbook
- hosts: test
tasks:
- name: 确认apache是否在运行
service: name=httpd state=started
- 1
- 2
- 3
- 4
- 5
这是个很简单的playbooks,首先它指定了要操作的主机组是test,定义了一个名称:确认apache是否在运行,执行pkg=httpd state=latest动作。
执行如下命令ansible-playbook test-playbook,效果如下:
[root@test-201 ~]# ansible-playbook test-playbook
PLAY [test] ********************************************************************
TASK [setup] *******************************************************************
ok: [10.2.31.203]
TASK [确认apache是否在运行] ***********************************************************
ok: [10.2.31.203]
PLAY RECAP *********************************************************************
10.2.31.203 : ok=2 changed=0 unreachable=0 failed=0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
由于playbooks涉及的内容较多,这里就不一一赘述了,更多内容请参考文档: http://ansible-tran.readthedocs.io/en/latest/docs/playbooks.html
小技巧:
1.有时候如果想直接操作某台服务器,但又没有在hosts里定义这台服务器时,可以使用如下命令:
ansible all -i ‘服务器ip,’
注意服务器ip后面要加个,
如
ansible all -i ‘10.2.31.201,’ -u test -k -a ‘uptime’
2.有时候我忘记配了哪些主机和组,我又不想看配置文件,有没有什么命令查看?
显示所有的组
ansible localhost -m debug -a 'var=groups.keys()'
- 1
显示所有的组和主机
ansible localhost -m debug -a 'var=groups'
- 1
BUG?
目前遇到两个bug(也可能是我的使用方式不对,正在关注中)
现已修复 1.在中文路径下无法使用.
如果在一个含中文的路径下面使用ansible,会无法执行,提示:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 14
所以不要跑到中文路径下面去执行ansible
2.su命令不能用.
使用su命令不成功,无在目标机器上通过一个普通用户su切换为root执行相关命令
错误如下:
ansible Timeout (12s) waiting for privilege escalation prompt
ansible的安装与使用的更多相关文章
- ansible网络模块安装httplib2
ansible网络模块安装httplib2 在进行使用ansible的网络模块的时候,需要安装httplib2模块 下载地址: https://pypi.python.org/pypi?%3Aacti ...
- ansible离线安装
目录 1. ansible离线安装 2. ansible配置文件 3. ansible常用的命令: 1. ansible离线安装 最近要在内网部署一台ansible服务器,只能手动离线安装ansibl ...
- CentOS7Linux中自动化运维工具Ansible的安装,以及通过模块批量管理多台主机
使用自动化运维工具Ansible集中化管理服务器 Ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet ...
- [k8s]kubespray(ansible)自动化安装k8s集群
kubespray(ansible)自动化安装k8s集群 https://github.com/kubernetes-incubator/kubespray https://kubernetes.io ...
- ansible 提示安装sshpass
之前用ansible一直用的root身份.机器之间又早早的做好了ssh信任.所以一直也没有出现什么问题.今天想想自己不能这么浪了,还是用回普通用户吧: 然而马上就遇到了第一个问题,ansible提示安 ...
- ansible自动安装rabbitmq
ansible playbook 安装rabbitmq单机版,以下脚本在CentOS6.7服务器测试通过. 需要配置本机的yum源,用于安装socat软件. rabbitmq版本和Erlang版本需要 ...
- ansible的安装和简单使用
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真 ...
- 运维自动化之ansible的安装与使用 转
运维自动化之ansible的安装与使用 随着服务器数量的增长,我们需要一个批量工具去提高工作效率,之前用的是puppet,ansible的简单,适用让我眼前一亮,决定写一篇ansible从安装到基本配 ...
- Centos7 使用 Ansible 批量安装中文字体
需求背景 Centos7 下 Java 生成图片水印时中文乱码,原因是没有安装中文字体. 安装中文字体 以下是基于 Centos7 手动安装中文字体的详细步骤.当测试或者生产环境服务器比较多的时候,建 ...
- ansible一键安装GreatSQL并构建MGR集群
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 利用ansible一键安装GreatSQL并完成MGR部署. 本次介绍如何利用ansible一键安装GreatSQL并完成 ...
随机推荐
- js中准确判断数据类型的方法
一 通用的typeof 方法 typeof ture 输出 Boolean typeof 123 输出 number ..... 但是 typeof 无法判断 nu ...
- C语言指针和操作系统的逻辑地址
你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干.只有在Intel实模式下,逻辑地址才和物理地址相等 ...
- stenciljs 学习十 服务器端渲染
stenciljs提供了 ssr 支持,对于express 最简单的就是使用提供的中间件 express 集成 const express = require('express'); const ...
- benthos 通过rest api 配置 stream 说明
stream 模式,我们可以通过rest api 进行控制 使用方法 启动 benthos --streams 进行流的配置(rest api) curl http://localhost:4195/ ...
- 时间操作(JavaScript版)—年月日三级联动(默认显示系统时间)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangshuxuncom/article/details/35263317 这个功能 ...
- SocketIOCP
项目地址 : https://github.com/kelin-xycs/SocketIOCP SocketIOCP 一个 用 C# Socket 实现 的 IOCP 这是一个 用 C# Socke ...
- TNS-12535 TNS-00505的处理方法
原文地址:TNS-12535 TNS-00505的处理方法 作者:wzq609 硬件说明: 操作系统版本:ORACLE LINUX 6.3 64位 数据库版本:11.2.0.3 64位 问题说明 ...
- TroubleShoot: Fail to deploy Windows UAP to device: 0x80073CFD
After creating "Blank App(Windows Universal)" targeting Windows Phone 10 in Visual Studio ...
- java操作Excel之POI(2)
一.设置单元格对齐方式: /** * 设置单元格对齐方式 */ public static void main(String[] args) throws Exception { Workbook w ...
- gc之六--Minor GC、Major GC、Full GC以及Mixed GC之间的区别
目录: GC之一--GC 的算法分析.垃圾收集器.内存分配策略介绍 GC之二--GC日志分析(jdk1.8)整理中 GC之三--GC 触发Full GC执行的情况及应对策略 gc之四--Minor G ...