希望长大对我而言,是可以做更多想做的事,而不是被迫做更多不想做的事...... 首页 ansible初识 丁D 学无止境 2019-04-01 22:50 3175已阅读 ansible 摘要ansible是一个配置管理工具,是一个自动化运维工具。 # ansible是什么 ansible是一个配置管理工具,是一个自动化运维工具。 ansible和其他配置管理工具一样,可以帮我们做一写重复的事情,如: 1.给100台服务器安装nginx 2.比如复制1个文件到100个服务器上 3.新的服务器加入,需要安装redis等 当然以上的场景,你会说编写一些脚本就可以完成;但是还是建议使用ansible,因为他有一些特性,如**幂等性** 幂等性:指操作一次和操作100次结果都是一样的。 ansible中有改变的 输出的信息是**黄色**的,没有改变的是**绿色**的 ```ansible ansible 192.168.10.55 -m ping ``` 上面是一个简单的示例 去ping 192.168.10.55 -m ping是指去调用ping模块 ansible有很多**模块**,实际工作中,是通过调用模块来帮我们完成任务的(我们要学习常见的模块) ```ansible ansible 192.168.10.55 -m ping ``` **我们要使用上面这个简单的示例,要满足两个要求: **1.要能通过**ssh**连接到受官主机 2.受官主机的ip等信息要添加到ansible的“**管理清单**”(文件在**/etc/ansible/hosts**) # 安装ansible(这里使用yum) 1.使用yum安装ansible,需要配置epel源,能帮我们自动解决软件包的依赖关系。 ```js rpm -qa|grep epel //检查存不存在epel(不是root用户要sudo) rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm //安装epel(不是root用户要sudo) ``` 2.安装ansible ```js yum install ansible ``` # 简单使用 ```js //配置受管主机(下面是使用ip 要可以自定义名字 但是自定义名字后就不能使用ip了,除非名字和ip都配置,即配置2条) 192.168.55.66 ansible_port=22 ansible_user=root ansible_ssh_pass=123456 //简单调用 ansible 192.168.55.66 -m ping ``` #ansible基础配置 使用**all**可以一次性管理配置清单所有的主机 ```js ansible all -m ping ``` 可以对受管主机进行**分组** ```js [test] 192.168.55.100 ansible_port=22 ansible_user=root ansible_ssh_pass=123456 ansible test -m ping //使用yaml all: hosts: 192.168.55.23: ansible_port: 22 ansible_user: root ansible_ssh_pass: 123456 test: ansible_host: 192.168.55.100 ansible_port: 22 ansible_user: root ansible_ssh_pass: 123456 ``` **嵌套分组要使用children** ```js [proA] 10.1.1.60 [proB] 10.1.1.70 [pro:children] proA proB //使用yaml all: children: pro: children: proA: hosts: 10.1.1.60: proB: hosts: 10.1.1.70: ``` #模块的基本使用 ansible都是通过模块来,实现各个任务的。 ```js //查看ansible所有的模块 ansible-doc -l //查看具体模块的详情 ansible-doc -s ping ``` ###fetch 从远程节点抓取文件到本地 **使用-a来对模块传递参数** ```js ansible test -m fetch -a "src=/root/app/apache-tomcat-8.5.35/conf/web.xml dest=/root" ``` ![alt](/upload/b6ce7a38e582e55eb7f4815ff18e7ca.png ) ###copy 将本地文件上传到远程服务器 ###file 操作文件,创建/删除 文件,目录,修改文件权限 ###blockinfile 在文件中插入一段文本,默认是文件尾(这段文本会被标记,标记后可以更新删除) ###lineinfile 确保某一行文本存在文本中,,确保某一行文本不存在文本中,,替换某一行 ###find 可以在远程服务器查找符合的文件,跟find一样 ###replace ###command ###shell ###cron ###service ###user,group,yum等 # 问题 ```js FAILED => Using a SSH password insteadof a key is not possible because Host Key checking is enabled and sshpass doesnot support this. Please add this host'sfingerprint to your known_hosts file to manage this host. 解决:在ansible 服务器上使用ssh 登陆下/etc/ansible/hosts 里面配置的服务器。然后再次使用ansible 去管理就不会报上面的错误了!但这样大批量登陆就麻烦来。因为默认ansible是使用key验证的,如果使用密码登陆的服务器,使用ansible的话, 第一步::要不修改ansible.cfg配置文件的ask_pass = True给取消注释,要不就在运行命令时候加上-k,这个意思是-k, --ask-pass ask for SSH password。 第二步::再修改:host_key_checking= False即可 ``` 免密登录 ```js ansible免密登录 参考 https://www.jianshu.com/p/fc88132924d5 all: children: k8s-master: hosts: 192.168.144.128: 192.168.144.129: ssh-keygen -t rsa -b 2048 -P '' -f /root/.ssh/id_rsa ssh-keyscan 192.168.144.128 192.168.144.129 >> /root/.ssh/known_hosts - hosts: all tasks: - name: install ssh key authorized_key: user=root key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" state=present //密码一样所以加入-k 如果不一样 在hosts文件中要配置各自的密码不需要-k ansible-playbook -k -i /etc/ansible/hosts ~/ansible/ssh-addkey.yml ``` ``` 免密登录就是将管理机的公钥加入被管理机 第一步 首先在管理机生成密钥对 ssh-keygen 第二步 将公钥复制到被管理机 ssh-copy-id -i /root/.ssh/id_rsa.pub root@xxx.24.xxx.86 root@xxx.24.xxx.86 被管理机的用户及ip 第3步 修改/etc/ansible/ansible.cfg 的 ask_pass 改成false ``` ![](/upload/413DE8B4-07A0-4e7e-80CB-715B8BB42975.png) 很赞哦! (0) 上一篇:docker 下一篇:ansible-语法 目录 点击排行 Elasticsearch6.3.2之x-pack redis哨兵 2019-07-09 22:05 Redis+Twemproxy+HAProxy+Keepalived 2019-07-12 17:20 GC优化策略和相关实践案例 2019-10-10 10:54 JVM垃圾回收器 2019-10-10 10:23 标签云 Java Spring MVC Mybatis Ansible Elasticsearch Redis Hive Docker Kubernetes RocketMQ Jenkins Nginx 友情链接 郑晓博客 佛布朗斯基 凉风有信 MarkHoo's Blog 冰洛博客 南实博客 Rui | 丁D Java研发工程师 生活可以用「没办法」三个字概括。但别人的没办法是「腿长,没办法」、「长得好看,没办法」、「有才华,没办法」。而你的没办法,是真的没办法。 请作者喝咖啡