Ansible 安装及指令

Ansible 安装及指令

1. 安装Ansible

  • ansible安装常用两种方式,yum安装和pip程序安装

  • 这里提供二种安装方式,任选一种即可

    1.使用yum 安装
    
    $ yum install ansible –y 
    
    2.使用pip :pip是安装Python包的管理器,类似yum
    
    $ pip install ansible   如果没pip,需先安装pip.yum可直接安装:
    $ yum install python-pip
    $ pip install ansible
    
  • 确认安装: ansible --version 查询版本

2. Ansible配置文件

  • ansible 配置文件/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 # 默认并发数
    #sudo_user = root # 默认sudo用户
    #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
    #ask_pass = True
    #remote_port = 22
    #host_key_checking = False # 检查对应服务器的host_key,建议取消注释
    #log_path=/var/log/ansible.log #日志文件
    #module_name = command #默认模块
    
  • sudo_user:

    • 这是设置默认执行命令的用户,也可以在playbook中重新设置这个参数。配置实例如下:
      • sudo_user = root
  • remote_port:

    • 这是指定连接被管节点的管理端口,默认是22。除非设置了特殊的SSH端口,不然这个参数一般是 不需要修改的。配置实例如下:
      • remote_port = 80
  • host_key_checking:

    • 这是设置是否检查SSH主机的密钥。可以设置为True或False,关闭后第一次连接没有提示配置实例:
      • host_key_checking = False
  • timeout:

    • 这是设置SSH连接的超时间隔,单位是秒。配置实例如下:
      • timeout = 60
  • log_path:

    • Ansible系统默认是不记录日志的,如果想把Ansible系统的输出记录到日志文件中,需要设置log_path 来指定一个存储Ansible日志的文件。配置实例如下:
      • log_path = /var/log/ansible.log
  • 另外需要注意,执行Ansible的用户需要有写入日志的权限,模块将会调用被管节点的syslog来记录

3. 配置文件、程序及命令

3.1 配置文件
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles/ 存放角色的目录
3.2 程序
/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界面与用户交互的执行工具
3.3 ansible 命令
  • ansible

     # ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方式联系各被管理节点
    
    • ansible [-m module_name] [-a args]

      --version 显示版本
      -m module 指定模块,默认为command
      -v 详细过程 –vv -vvv更详细
      --list-hosts 显示主机列表,可简写 --list
      -k, --ask-pass 提示输入ssh连接密码,默认Key验证
      -K, --ask-become-pass 提示输入sudo时的口令
      -C, --check 检查,并不执行
      -T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
      -u, --user=REMOTE_USER 执行远程执行的用户
      -b, --become 代替旧版的sudo 切换
      --become-user=USERNAME 指定sudo的runas用户,默认为root
      
  • ansible-playbook 定制任务,编排剧本

  • ansible-galaxy

    # 连接 https://galaxy.ansible.com 下载相应的roles
    # 列出所有已安装的galaxy
    $ ansible-galaxy list
    
    # 安装galaxy
    $ ansible-galaxy install geerlingguy.redis
    
    # 删除galaxy
    $ ansible-galaxy remove geerlingguy.redis
    
  • ansible-vault

    # 功能:管理加密解密yml文件
    $ ansible-vault [create|decrypt|edit|encrypt|rekey|view]
    $ ansible-vault encrypt hello.yml 加密
    $ ansible-vault decrypt hello.yml 解密
    $ ansible-vault view hello.yml 查看
    $ ansible-vault edit hello.yml 编辑加密文件
    $ ansible-vault rekey hello.yml 修改口令
    $ ansible-vault create new.yml 创建新文件
    
  • ansible-pull 推送命令至远程,效率无限提升,对运维要求较高

  • ansible-doc: 显示模块帮助

    • ansible-doc [options] [module…]

      -a 显示所有模块的文档
      -l, --list 列出可用模块
      -s, --snippet显示指定模块的playbook片段
      
    • 示例:

      $ ansible-doc –l 列出所有模块
      $ ansible-doc ping 查看指定模块帮助用法
      $ ansible-doc –s ping 查看指定模块帮助用法
      

4. ansible的Host-pattern

4.1 ansible 命令
  • 匹配主机的列表
    • All:表示所有Inventory中的所有主机
      • ansible all -m ping
    • * :通配符
    • ansible “” -m ping # 其中代表的意思就是all,所有的IP地址
    • ansible 192.168.1.* -m ping # 匹配1.*的IP地址
    • ansible “*srvs” -m ping
    • 或关系
      • ansible “websrvs:appsrvs” -m ping # 或关系,取IP地址的并集
      • ansible “192.168.1.10:192.168.1.20” -m ping
      • ansible的Host-pattern
    • 逻辑与
      • ansible “websrvs:&dbsrvs” -m ping # 与关系,取IP地址的交集
      • 在websrvs组并且在dbsrvs组中的主机
    • 逻辑非
      • ansible ‘websrvs:!dbsrvs’ -m ping # 在websrvs中,取dbsrvs的反
      • 在websrvs组,但不在dbsrvs组中的主机
      • 注意:此处为单引号
    • 综合逻辑
      • ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ -m ping
    • 正则表达式
      • ansible “websrvs:&dbsrvs” -m ping
      • ansible “~(web|db).*.magedu.com” -m ping
4.2 ansible 常用模块
  • shell:可以使用shell命令,支持特殊字符和管道等,需要在/etc/ansible/ansible.cfg配置文件中开启功能:module_name = shell
  • command:使用普通命令,不支持特殊字符和管道
  • script:可以批量执行脚本
  • copy:可以将本地文件批量复制到远端主机上
  • fetch:可以将远端主机的文件批量复制到本地
  • file:创建文件或者目录
  • hostname:批量修改主机名
  • cron:批量创建定时任务
  • yum:批量安装软件
  • service:批量启动服务
  • user:批量创建用户
  • group:批量创建组
  • ****setup:****查机器的所有facts信息
4.3 ansible 使用前配置
  • Ansible配置公私钥

    配置ansible 使用公钥验证
    
    虽然ansible支持其他主机认证方式,但是我们最常用的的还是基于秘钥的认证:
    
  • 首先生成秘钥

    $ ssh-keygen -t rsa -P " " -f /root/.ssh/id_rsa
    
  • 然后向主机分发秘钥:

    $ ssh-copy-id root@   #@后面跟主机名或者IP地址3、如果出现以下情况:
    
    # ssh-copy-id -i root/.ssh/id_rsa.pub 10.1.6.72
    -bash: ssh-copy-id: command not found
    
    请尝试: yum -y install openssh-clientsansible
    
  • 直接执行脚本批量将本地公钥传递到对方主机:

    $ vim iplist.txt  将对方的主机IP地址写入
    192.168.34.102
    192.168.34.103
    192.168.34.105
    
    # 书写批量执行脚本
    #!/bin/bash  
    user=root
    password=000000
    ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
     
    while read ip ;do
    expect <<EOF
    set timeout 10
    spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user@$ip
    expect {
    "yes/no" { send "yes\n";exp_continue }
    "password" { send "$password\n" }
    }
    expect eof
    EOF
    done < iplist.txt
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值