4

码住!Ansible安装使用详解来袭!

 2 years ago
source link: https://os.51cto.com/article/711632.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
85e30e379177bd42566622b9b43f665c6a5696.jpg

一、使用 yum 安装

1.使用yum安装

yum install epel-release -y
yum install ansible –y

2.使用 pip(python的包管理模块)安装

首先,我们需要安装一个python-pip包,安装完成以后,则直接使用pip命令来安装我们的包,具体操作过程如下:

yum install python-pip
pip install ansible

3.查看ansible的版本号

[root@app01 paas-basic]# ansible --version
ansible 2.9.18
 config file = /etc/ansible/ansible.cfg
 configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
 ansible python module location = /usr/lib/python2.7/site-packages/ansible
 executable location = /usr/bin/ansible
 python version = 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
[root@app01 paas-basic]#

二、ansible的配置文件

1.ansible 命令执行过程

  • 加载自己的配置文件,默认/etc/ansible/ansible.cfg;
  • 查找对应的主机配置文件,找到要执行的主机或者组;
  • 加载自己对应的模块文件,如 command;
  • 通过ansible将模块或命令生成对应的临时py文件(python脚本), 并将该文件传输至远程服务器;
  • 对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件;
  • 给文件 +x 执行权限;
  • 执行并返回结果;
  • 删除临时py文件,sleep 0退出;

2.ansible 程序结构

安装目录如下(yum安装):

配置文件目录:/etc/ansible/
 执行文件目录:/usr/bin/
 Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible/
 Help文档目录:/usr/share/doc/ansible-X.X.X/
 Man文档目录:/usr/share/man/man1/

3.ansible配置文件查找顺序

ansible与我们其他的服务在这一点上有很大不同,这里的配置文件查找是从多个地方找的,顺序如下:

1、检查环境变量ANSIBLE_CONFIG指向的路径文件(export ANSIBLE_CONFIG=/etc/ansible.cfg);
2、~/.ansible.cfg,检查当前目录下的ansible.cfg配置文件;
3、/etc/ansible.cfg检查etc目录的配置文件。

4.ansible配置文件

ansible 的配置文件为/etc/ansible/ansible.cfg,ansible 有许多参数,下面我们列出一些常见的参数:

inventory = /etc/ansible/hosts    #这个参数表示资源清单inventory文件的位置
library = /usr/share/ansible    #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
forks = 5    #并发连接数,默认为5
sudo_user = root    #设置默认执行命令的用户
remote_port = 22    #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
host_key_checking = False    #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
timeout = 60    #设置SSH连接的超时时间,单位为秒
log_path = /var/log/ansible.log    #指定一个存储ansible日志的文件(默认不记录日志)

5.ansible主机清单

在配置文件中,我们提到了资源清单,这个清单就是我们的主机清单,里面保存的是一些 ansible 需要连接管理的主机列表。我们可以来看看他的定义方式:

1)直接指明主机地址或主机名:

green.example.com
blue.example.com#
192.168.100.1
192.168.100.10

2)定义一个主机组[组名]把地址或主机名加进去:

[mysql_test]
192.168.253.159
192.168.253.160
192.168.253.153

需要注意的是,这里的组成员可以使用通配符来匹配,这样对于一些标准化的管理来说就很轻松方便了。

我们可以根据实际情况来配置我们的主机列表,具体操作如下:

[root@server ~]# vim /etc/ansible/hosts
[web]
192.168.19.100
192.168.19.101

6.设置ssh无密码登录

设置免密码登录:

ssh-keygen  
ssh-copy-id -p 33 [email protected]

7.ansible 命令详解

命令的具体格式如下:

ansible [-f forks] [-m module_name] [-a args]

也可以通过ansible -h来查看帮助,下面我们列出一些比较常用的选项,并解释其含义:

-a MODULE_ARGS   #模块的参数,如果执行默认COMMAND的模块,即是命令参数,如:“date”,“pwd”等等
-k,--ask-pass #ask for SSH password。登录密码,提示输入SSH密码而不是假设基于密钥的验证
--ask-su-pass #ask for su password。su切换密码
-K,--ask-sudo-pass #ask for sudo password。提示密码使用sudo,sudo表示提权操作
--ask-vault-pass #ask for vault password。假设我们设定了加密的密码,则用该选项进行访问
-B SECONDS #后台运行超时时间
-C #模拟运行环境并进行预运行,可以进行查错测试
-c CONNECTION #连接类型使用
-f FORKS #并行任务数,默认为5
-i INVENTORY #指定主机清单的路径,默认为/etc/ansible/hosts
--list-hosts #查看有哪些主机组
-m MODULE_NAME #执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
-o #压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用
-S #用 su 命令
-R SU_USER #指定 su 的用户,默认为 root 用户
-s #用 sudo 命令
-U SUDO_USER #指定 sudo 到哪个用户,默认为 root 用户
-T TIMEOUT #指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改
-u REMOTE_USER #远程用户,默认为 root 用户
-v #查看详细信息,同时支持-vvv,-vvvv可查看更详细信息

8.执行命令

[root@ambari1 .ssh]# ansible all -m ping
The authenticity of host '192.168.17.221 (192.168.17.221)' can't be established.
ECDSA key fingerprint is c5:76:ed:2e:c8:6b:85:25:0b:d7:b4:8f:12:66:72:1f.
Are you sure you want to continue connecting (yes/no)? yes
192.168.19.100 | UNREACHABLE! => {
    "changed": false,  
    "msg": "Failed to connect to the host via ssh: Warning: Permanently added '192.168.19.100' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n",  
   "unreachable": true
}
192.168.19.101 | SUCCESS => {
    "changed": false,  
   "ping": "pong"
}

存在的问题解决:

从上面我们可以看到,192.168.19.100这一台出现了问题,并不能执行成功,此时可以在/etc/ansible/hosts的基础上添加相关内容如下:

## db-[99:101]-node.example.com
[master]
192.168.19.100 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=33
192.168.19.101

三、ansible的命令

1.command 模块

这个模块可以直接在远程主机上执行命令,并将结果返回本主机。

[root@test1 ~]# ansible web -m command -a 'netstat -ntlp'
192.168.19.100 | CHANGED | rc=0 >>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
192.168.19.101 | CHANGED | rc=0 >>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
[root@test1 ~]#

2.shell 模块

shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。

[root@test1 ~]# ansible web -m shell -a 'cat /etc/passwd |grep "root"'
192.168.19.101 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
192.168.19.100 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@test1 ~]#

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK