Ansible 之 yum安装

一、应用epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
更新缓存
yum clean all
yum makecache
二、安装ansible
查看yum安装的ansible版本
yum info ansible
yum -y install ansible
ansible --version
三、查看ansible的主要文件
rpm -ql ansible | more
rpm -ql ansible | less
四、相关文件
配置文件
    /etc/ansible/ansible.cfg  主配置文件,配置ansible工作特性(一般无需修改)
    /etc/ansible/hosts        主机清单(将被管理的主机放到此文件)
    /etc/ansible/roles/       存放角色的目录

程序
    /usr/bin/ansible          主程序,临时命令执行工具
    /usr/bin/ansible-doc      查看配置文档,模块功能查看工具
    /usr/bin/ansible-galaxy   下载/上传优秀代码或Roles模块的官网平台
    /usr/bin/ansible-playbook 定制自动化任务,编排剧本工具
    /usr/bin/ansible-pull     远程执行命令的工具
    /usr/bin/ansible-vault    文件加密工具
    /usr/bin/ansible-console  基于Console界面与用户交互的执行工具
五、ansible 配置文件
Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认)

vim /etc/ansible/ansible.cfg

[defaults]
#inventory     = /etc/ansible/hosts      # 主机列表配置文件
#library       = /usr/share/my_modules/  # 库文件存放目录
#remote_tmp    = $HOME/.ansible/tmp      # 临时py命令文件存放在远程主机目录
#local_tmp     = $HOME/.ansible/tmp      # 本机的临时命令执行目录  
#forks         = 5                       # 默认并发数,同时可以执行5次
#sudo_user     = root                    # 默认sudo 用户
#ask_sudo_pass = True                    # 每次执行ansible命令是否询问ssh密码
#ask_pass      = True                    # 每次执行ansible命令是否询问ssh口令
#remote_port   = 22                      # 远程主机的端口号(默认22)
建议优化项: 
host_key_checking = False               # 检查对应服务器的host_key,建议取消注释
log_path=/var/log/ansible.log           # 日志文件,建议取消注释
module_name   = command                 # 默认模块


1.安装epel-release YUM 源  yum install epel-release -y
2.安装repolist YUM源 yum repolist -y
3.安装ansible 包 yum install ansible -y
4.检测安装是否成功 rpm -qa|grep ansible
5.查看版本 ansible --version
5.基础知识

     配置文件目录:/etc/ansible(ansible.cfg、hosts、roles(自定义或下载的role)) 
    执行文件目录:/usr/bin 
    Lib库依赖目录:/usr/lib/python2.6/site-packages/ansible 
    Help文档目录: /usr/share/doc/ansible-2.3.1.0 
    Man文档目录:/usr/share/man/man1

6.配置ansible
(本机在128主机上安装,控制127电脑)
vim /etc/ansible/hosts
在hosts文件中加入127的主机地址

7.SSH免密钥登录设置
  生成公钥/私钥 ssh-keygen -t rsa

8.查看秘钥路径 ls /root/.ssh/
9.入信任文件(将/root/.ssh/秘钥分发到其他服务器,并在所有服务器上执行如下指令):
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.2.128 回车 并输入密码
10.查看是否成功 ls /root/.ssh/
11.测试是否成功 ssh 192.168.2.127

12.检测所有主机的网络状态
1>  默认情况下连接被管理的主机是ssh基于key验证,如果没有配置key,权限将会被拒绝
    因此需要指定以谁的身份连接,输入用户密码,必须保证被管理主机用户密码一致
    ansible all -m ping -k
2> 或者实现基于key验证 将公钥ssh-copy-id到被管理的主机上 , 实现免密登录
   ansible all -m ping
ansible的Host-pattern
匹配主机的列表
    All :表示所有Inventory中的所有主机
        ansible all –m ping
    * :通配符
        ansible "*" -m ping  (*表示所有主机)
        ansible 192.168.1.* -m ping
        ansible "*srvs" -m ping
    或关系 ":"
        ansible "websrvs:appsrvs" -m ping
        ansible “192.168.1.10:192.168.1.20” -m ping
    逻辑与 ":&"
        ansible "websrvs:&dbsrvs" –m ping
        在websrvs组并且在dbsrvs组中的主机
    逻辑非 ":!"
        ansible 'websrvs:!dbsrvs' –m ping
        在websrvs组,但不在dbsrvs组中的主机
        注意:此处为单引号
    综合逻辑
        ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' –m ping
    正则表达式
        ansible "websrvs:&dbsrvs" –m ping
        ansible "~(web|db).*\.magedu\.com" –m ping
1.文件分发
[root@kht132 ansible]# ansible "192.168.2.133" -m copy -a "src=aa.cfg dest=/kht/aa.kht"
192.168.2.133 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/kht/aa.kht",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1658110594.19-7321-111204726928976/source",
    "state": "file",
    "uid": 0
}
[root@kht132 ansible]# ansible "web*" -m copy -a "src=aa.cfg dest=/kht/bb.kht"
192.168.2.133 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/kht/bb.kht",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1658110628.72-7531-6176147960609/source",
    "state": "file",
    "uid": 0
}
192.168.2.134 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.2.134 port 22: No route to host",
    "unreachable": true
}
-m 指定要运⾏的模块,⽐如这⾥的 ping 模块和 copy 模块
-a 指定模块的参数, 这⾥模块 ping 没有指定参数。 模块 copy
指定了 src 和 dest 参数
posted @ 2022-07-14 16:10  kht  阅读(2171)  评论(0编辑  收藏  举报