一、SSH互信

1 配置/etc/ansible/hosts 文件

  1. [zabbix_agent]
  2. 172.26.4.203
  3. 172.26.4.204
  4. 172.26.4.205
  5. [zabbix_agent:vars]
  6. ansible_ssh_user=root
  7. ansible_ssh_pass=root1234
  8. ansible_ssh_port=22

  

2 在ansible-server端生成秘钥对

  1. ssh-keygen -t rsa

  

3 创建playbook

  1. 1) 第一种方式:
  2. # 新增本地(ansible-server)公钥内容到远端客户端.ssh目录中authorized_keys文件,没有则创建authorized_keys文件
  3. # state: 1) present 添加,2) absent 删除
  4. ---
  5. - hosts: zabbix_agent
  6. gather_facts: false
  7.  
  8. tasks:
  9. - name: deliver authorized_keys
  10. authorized_key:
  11. user: root
  12. key: "{{ lookup('file', '/root/.ssh/id_rsa.pub) }}"
  13.  
  14. # 解释:
  15. # 添加或移除authorized keys为特定用户:比如上面的是添加读取本地的id_rsa.pub文件到远端主机的authorized_keys文件中
  16. # 把ansible-server中的/root/.ssh/id_ras.pub中的文件内容,拷贝到其他主机中的/root/.ssh/authorized_keys 文件中,实现SSH互信

  

第二种书写方式:

  1. - hosts: zabbix_agent
  2. remote_user: root
  3.  
  4. tasks:
  5. - name: mkdir /root/.ssh
  6. command: mkdir -p /root/.ssh
  7.  
  8. - name: copy ssh key
  9. copy: src=/root/.ssh/id_rsa.pub dest=/root/.ssh owner=root group=root mode=0644

这个playbook是经过测试的

  1. # 新增本地(ansible-server)公钥内容到远端客户端.ssh目录中authorized_keys文件,没有则创建authorized_keys文件
  2. # state: 1) present 添加,2) absent 删除
  3. ---
  4. - hosts: zabbix_agent
  5. gather_facts: false
  6. remote_user: root
  7.  
  8. tasks:
  9. - name: deliver authorized_keys
  10. authorized_key:
  11. user: root
  12. key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"

4 运行

  1. cd /etc/ansible/playbook/ssh_trust
  2. ansible-playbook rsync_key.yml

  

5 可能出现的错误和解决方法

这里只会罗列出,我遇到的错误以及解决方法,如果你和我一样遇到了这个错误,那么恭喜你。咱俩还挺有缘

  1. [root@ansible-server ssh_trust]# ansible-playbook rsync_key.yml
  2.  
  3. PLAY [zabbix_agent] ************************************************************************************************************************************************
  4.  
  5. TASK [deliver authorized_keys] *************************************************************************************************************************************
  6. fatal: [172.26.4.204]: FAILED! => {"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."}
  7. fatal: [172.26.4.203]: FAILED! => {"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."}
  8. fatal: [172.26.4.205]: FAILED! => {"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."}
  9. to retry, use: --limit @/etc/ansible/playbook/ssh_trust/rsync_key.retry
  10.  
  11. PLAY RECAP *********************************************************************************************************************************************************
  12. 172.26.4.203 : ok=0 changed=0 unreachable=0 failed=1
  13. 172.26.4.204 : ok=0 changed=0 unreachable=0 failed=1
  14. 172.26.4.205 : ok=0 changed=0 unreachable=0 failed=1
  15.  
  16. 2)原因和解决办法:
  17. ssh第一次连接的时候一般会提示输入yes 进行确认为将key字符串加入到 ~/.ssh/known_hosts 文件中。而本机的~/.ssh/known_hosts文件中并有fingerprint key
  18. 解决方法:在ansible.cfg文件中更改下面的参数:
  19. #host_key_checking = False 将#号去掉即可

  

二 批量安装配置zabbix-agent

上面的很简单是不是,下面咱们来票大的。这里需要说明的是,使用playbook编写文件时,尽量使用ansible提供的模块,尽量避免使用shell这个模块。因为ansible具有【幂等性】这个特点,具体什么是幂等性,请自行谷歌吧。这里只是简单的说一下。举个栗子,假如我们创建一个文件,第一次没有,我们运行可以创建成功,如果第二次运行一般会报错,说文件已存在。如果使用ansible提供的模块,因为具备【幂等性】特点,则不会报错。他应该有检查机制,存在则不创建了。好了,下面开始咱们看一下使用ansible的最常用的套路吧

如果各位看官对playbook有兴趣可以移步:https://galaxy.ansible.com/

下面开始我们的实战了,激动不。

1 定义hosts文件

这个hosts文件位于/etc/ansible/hosts 如果是yum安装的,一般配置文件都位于这里,hosts文件中定义的组,主机等等。都是我们操作的对象

/etc/ansible/hosts

  1. [zabbix_agent]
  2. 172.26.4.203
  3. 172.26.4.204
  4. 172.26.4.205
  5. [zabbix_agent:vars]
  6. ansible_ssh_user=root
  7. ansible_ssh_pass=root1234
  8. ansible_ssh_port=22

  

2 查看我们的目录结构

下面的目录结构是不是觉得很多,是很多,但是每个都是很有用的。

给你一个创建的shell吧,下面创建的目录是在 /etc/ansible 目录中创建的

  1. #!/bin/bash
  2.  
  3. mkdir zabbix_centos7
  4. mkdir zabbix_centos7/zabbix_agent
  5. mkdir zabbix_centos7/zabbix_agent/roles
  6. mkdir zabbix_centos7/zabbix_agent/roles
  7. mkdir zabbix_centos7/zabbix_agent/roles/{common,install,uninstall,configure}/{handlers,files,meta,tasks,templates,vars} -p

  

下面是展开的样子

  1. [root@ansible-server ansible]# tree zabbix_centos7
  2. zabbix_centos7
  3. ├── init.sh
  4. ├── readme.md
  5. └── zabbix_agent
  6. ├── roles
  7.    ├── common
  8.       ├── files
  9.       ├── handlers
  10.          └── main.yml
  11.       ├── meta
  12.       ├── tasks
  13.          └── main.yml
  14.       ├── templates
  15.       └── vars
  16.       └── main.yml
  17.    ├── configure
  18.       ├── files
  19.          └── zabbix_scripts
  20.          ├── discovery_tcp_port.sh
  21.          └── tcp_connect_status.sh
  22.       ├── handlers
  23.          └── main.yml
  24.       ├── meta
  25.       ├── tasks
  26.          ├── 01-sync-clock.yml
  27.          ├── 02-allow-sudo.yml
  28.          ├── 03-sync-conf_files.yml
  29.          └── main.yml
  30.       ├── templates
  31.          ├── Userparameter_script.conf
  32.          └── zabbix_agentd.conf
  33.       └── vars
  34.       └── main.yml
  35.    ├── install
  36.       ├── files
  37.          └── ansible-zabbix-4.0.0.tar.gz
  38.       ├── handlers
  39.       ├── meta
  40.       ├── tasks
  41.          ├── 01-create-user.yml
  42.          ├── 02-copy-code.yml
  43.          ├── 03-start-zabbix.yml
  44.          ├── 04-add-iptables.yml
  45.          └── main.yml
  46.       ├── templates
  47.          ├── zabbix_agentd.conf
  48.          └── zabbix-agent.service
  49.       └── vars
  50.       └── main.yml
  51.    └── uninstall
  52.    ├── files
  53.    ├── handlers
  54.    ├── meta
  55.    ├── tasks
  56.       ├── main.yml
  57.       └── uninstall_zabbix.yml
  58.    ├── templates
  59.    └── vars
  60.    └── main.yml
  61. ├── zabbix_configure.retry
  62. ├── zabbix_configure.yml
  63. ├── zabbix_delete.retry
  64. ├── zabbix_delete.yml
  65. ├── zabbix_install.retry
  66. └── zabbix_install.yml

  

3 安装程序的tasks任务列表

  1. 1)定义安装程序入口文件 zabbix_install.yml
  2. [root@ansible /etc/ansible/zabbix_centos7/zabbix_agent ]# vim zabbix_install.yml
  3. ---
  4. - hosts: testhosts
  5. remote_user: root
  6. gather_facts: True
  7. roles:
  8. - common
  9. - install
  10.  
  11. 2) 定义安装程序-创建用户任务01-create-user.yml
  12. [root@ansible /etc/ansible/zabbix_rhel/zabbix_agent ]# vim roles/install/tasks/01-create-user.yml
  13. ---
  14. - name: Create zabbix user
  15. user: name={{ zabbix_user }} state=present create_home=no shell=/sbin/nologin
  16.  
  17. 3) 定义安装程序-拷贝安装文件任务02-copy-code.yml
  18. [root@ansible /etc/ansible/zabbix_rhel/zabbix_agent ]# vim roles/install/tasks/02-copy-code.yml
  19. ---
  20. - name: Create src dir
  21. file: path=/opt/source state=directory mode=0755
  22.  
  23. - name: Create install dir
  24. file: path={{ zabbix_dir }} state=directory mode=0755
  25.  
  26. - name: Copy zabbix agentd code file to clients
  27. copy: src=ansible-zabbix-{{ zabbix_version }}.tar.gz dest=/opt/source/ansible-zabbix-{{ zabbix_version }}.tar.gz
  28. owner=root group=root
  29.  
  30. - name: Uncompression ansible-zabbix-{{ zabbix_version }}.tar.gz
  31. shell: tar xf /opt/source/ansible-zabbix-{{ zabbix_version }}.tar.gz -C {{ zabbix_dir }}
  32.  
  33. - name: Copy zabbix start scripts
  34. template: src=zabbix-agent.service dest=/usr/lib/systemd/system/zabbix-agent.service owner=root group=root mode=0755
  35.  
  36. - name: Copy zabbix config file
  37. template: src=zabbix_agentd.conf dest={{ zabbix_dir }}/etc/zabbix_agentd.conf owner={{ zabbix_user }} group={{ zabbix_user }}
  38. mode=0644
  39.  
  40. - name: Modify zabbix basedir permission
  41. file: path={{ zabbix_dir }} owner={{ zabbix_user }} group={{ zabbix_user }} mode=0755 recurse=yes
  42.  
  43. - name: Link zabbix-agent.service command
  44. file: src={{ zabbix_dir }}/sbin/zabbix_agentd dest=/usr/local/sbin/zabbix_agentd state=link
  45.  
  46. - name: Delete ansible-zabbix-{{ zabbix_version }}.tar.gz source file
  47. shell: rm -f /opt/source/ansible-zabbix-{{ zabbix_version }}.tar.gz
  48.  
  49. 4) 定义安装程序-启动zabbix_agentd服务任务03-start-zabbix.yml
  50. [root@ansible /etc/ansible/zabbix_rhel/zabbix_agent ]# vim roles/install/tasks/03-start-zabbix.yml
  51. ---
  52. - name: add permit tmp
  53. file: path=/tmp owner=root mode=0777 recurse=yes
  54. - name: Start zabbix service
  55. service: name=zabbix-agent.service state=started enabled=yes
  56.  
  57. 5) 定义安装程序-添加iptable规则04-add-iptables.yml
  58. ---
  59. - name: insert iptables rule for zabbix
  60. lineinfile: dest=/etc/sysconfig/iptables create=yes state=present regexp="{{ zabbix_agentd_port }}"
  61. insertafter="^:OUTPUT"
  62. line="-A INPUT -p tcp --dport {{ zabbix_agentd_port }} -s {{ zabbix_server_ip }} -j ACCEPT"
  63.  
  64. notify: stop firewalld
  65.  
  66. 6) 定义安装程序-tasks任务列表的主调用接口文件main.yml
  67. ---
  68. - include: 01-create-user.yml
  69. - include: 02-copy-code.yml
  70. - include: 03-start-zabbix.yml
  71. - include: 04-add-iptables.yml

  

总结一下上面的

  1. 总结: tasks任务列表说明:
  2. Playbook允许用户将tasks任务细分为多个任务列表,通过一个main任务来调用。
  3. 当然你也可以将涉及的所有任务全部写到main.yml文件中。

  

继续...

下面的提供一下git地址吧。自行去看吧。

https://github.com/wanstack/playbook

ansible常用套路(一)的更多相关文章

  1. 多项式 之 快速傅里叶变换(FFT)/数论变换(NTT)/常用套路【入门】

    原文链接https://www.cnblogs.com/zhouzhendong/p/Fast-Fourier-Transform.html 多项式 之 快速傅里叶变换(FFT)/数论变换(NTT)/ ...

  2. ansible常用命令

    一.ansible常用命令 一.ansible命令的常用参数 ansible 默认提供了很多模块来供我们使用.在 Linux 中,我们可以通过 ansible-doc -l 命令查看到当前 ansib ...

  3. ansible常用模块用法

    ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报  分类: Linux(44)   ansible 版权声明:本文为博主原创文章,未经博主允许不得 ...

  4. Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ...

  5. Ansible常用模块命令

    Ansible常用模块命令 一.安装ansible yum install epel-release yum install ansible 二.配置文件配置 vi /etc/ansible/ansi ...

  6. Ansible常用功能

    Ansible 是近几年十分流行的DevOps工具架构什么的我就不在这里赘述了,网上一找一堆 这里写点我在ansible常用功能 1.命令串 #copy文件 #ansible host文件中的主机组 ...

  7. iptables详解(14):iptables小结之常用套路

    不知不觉,已经总结了13篇iptables文章,这些文章中有一些需要注意的地方. 此处,我们对前文中的一些注意点进行总结,我们可以理解为对"常用套路"的总结. 记住这些套路,能让我 ...

  8. Ansible常用模块介绍及使用(2)

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)–技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几个 ...

  9. centos ansible常用命令

    ansible在日常运维中经常使用,特别是批量执行多台服务器的时候,有效减小重复的操作成本,以下从安装到使用仅讲解工作中常用的几种方式,模块很多功能很强大,但不做全面讨论. ansible安装 在ce ...

随机推荐

  1. 第二次作业(WordCount)

    1 Github项目地址:https://gitee.com/DamonGetup/WordCount/tree/master 2 对程序设计语言源文件统计字符数.单词数.行数,统计结果以指定格式输出 ...

  2. TA-Lib中文文档(二):talib安装

    安装 使用pip安装 PyPI: $ pip install TA-Lib Or checkout the sources and run setup.py yourself: $ python se ...

  3. python https协议和InsecurePlatformWarning问题

    本人最近在学习python,今天想使用python来抓取糗事百科网站上的一些笑话故事的,由于糗事百科的网站url采取的是https协议,所以当我按照常规的方式抓取的时候,发现不行,报错了,找了很多方法 ...

  4. 洛谷P1613 跑路 图论

    正解:倍增+图论 解题报告: 传送门! 话说这题是真滴很妙啊,,,大概港下QwQ 首先看懂这道题,它是说,只要是1<<k的都能1s跑过,而且每条边的长度都是1,就是说一秒可以跑过1< ...

  5. Elasticsearch环境安装配置

    安装Elasticsearch的步骤如下 - 第1步 - 查看安装在计算机上的java的最低版本,它要求java 7或以上或最新的版本.可以通过执行以下操作进行检查 - 在Windows操作系统(OS ...

  6. python模块之shutil高级文件操作

    简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作.对单个文件的操作也可参见os模块. 注意即便是更高级别的文件复制函数(shutil.co ...

  7. 一个简单的3D范例,是在别人基础上面整理的。

    一个简单的范例,是在别人基础上面整理的.原来的例子,框图太乱了,没有条理感. http://pan.baidu.com/s/1eQTyGCE

  8. h5前端项目常见问题汇总

    原文作者:FrontEndZQ 原文链接:https://github.com/FrontEndZQ/HTML5-FAQ H5项目常见问题及注意事项 Meta基础知识: H5页面窗口自动调整到设备宽度 ...

  9. xml转为array

    PHP实现微信支付,微信支付宝返回的xml结果如下: <xml>   <appid><![CDATA[wx2421b1c4370ec43b]]></appid ...

  10. Vue学习笔记之Vue的面向对象

    0x00 准备工作 JavaScript 语言中,生成实例对象的传统方法是通过构造函数. function Animal(name,age){ this.name = name; this.age = ...