ansible管理的设备有很多是一个自动化工具平常使用Linux命令使用的时候总要去执行重复的命名ansible自动化用来除去重复的劳动力使其工作效率更高。ansible低层是python开发实现批量的系统配置程序的部署运行命令。目录ansible安装1.rpm包本地ios镜像文件2.网络仓库安装(阿里云镜像站)3.pip工具安装4.ansible源码包安装ansible架构ansible配置文件常用配置段优先级顺序ansible主机清单定义主机清单的方式1.自定义主机2.自定义用户组3.特殊的主机组4.批量定义5.主机组嵌套主控节点和被控节点1.用户名、密码2.ssh密钥连接被控节点在主设备执行被控制节点操作遇到过的问题1.采用本地ios镜像文件安装ansible遇到的问题问题解释说明2.在使用pip工具安装ansible查看ansible --version出现问题解释说明我使用的解决方法3.ansible配置文件建立连接遇到的问题问题解释说明我使用的解决方法1.rpm包本地ios镜像文件我选择使用新建 RHEL9 阿里源的方式下载1.vim /etc/yum.repos.d/aliyun-rhel9.repo 或者cat /etc/yum.repos.d/aliyun-rhel9.repo EOF [BaseOS] nameBaseOS baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/ enabled1 gpgcheck0 [AppStream] nameAppStream baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/ enabled1 gpgcheck0 EOF 退出编辑执行 2.dnf clean all dnf makecache # 验证仓库是否正常能列出仓库即成功 dnf repolist 3.#下载rpm包 wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm # rpm安装这里用--nodeps没问题 rpm -ivh epel-release-latest-9.noarch.rpm --nodeps # 再次刷新缓存 dnf clean all dnf makecache 4.dnf install ansible -y # 验证版本 ansible --version ansible localhost -m ping //通信测试卸载方式dnf remove ansible-core -y2.网络仓库安装(阿里云镜像站)https://mirrors.aliyun.com/epel-archive/9.3/Everything/x86_64/http://阿里云镜像站3.pip工具安装只需要一条命令我个人使用的是pip工具安装下载过程很慢时可使用pip加速器pip install ansible2.9.0 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple卸载方式pip3 uninstall -y ansible4.ansible源码包安装不呈现ansible架构ansible 核心工具 inventory 记录ansible管理主机的信息包括端口、密码、ip 主机清单 modules 又名“剧本” YAML格式的文件多个任务定义在一个文件中定义主机需要用那些模块来完成功能 core-modules 核心模块操作通过调用核心来完成管理任务 costome-modules 自定义模块完成核心模块无法完成的功能支持多种语言 plugins 连接插件ansible和hosts通信使用ansible配置文件当我们需要去找服务清单怎么连接服务器用什么权限执行任务时就要书写相应的配置文件命令来满足需求它的作用是控制执行环境连接方式插件路径通过合理的配置让不同环境使用不同的设置提高安全性减少命令的重复输入使自动化流程更加的流程。核心配置文件ansible.cfg//控制ansible的基本行为所有的ansible工具都会读取ansible-navigator称为导航器//专门控制行为不断的发展ansible逐渐靠近容器使用容器化的方式来执行ansible任务。进入配置文件路径vim ansible.cfg常用配置段[defaults] inventory //主机清单位置 ask_pass //默认远程登录用户 remote_user //是否提示输入ssh密码 host_key_checking //首次连接是否检测主机key roles_path //角色搜索路径 collection_path //集合搜素路径 [privilege_escalation] //权限提升 become //是否启用sudo/su become_method //切换方式sudo/su become_user //切换后的用户(默认root) become_ask_pass //是否提示输入sudo密码eg[defaults] inventory/etc/ansible/hosts ask_passfalse remote_userdevops host_key_checkingfalse [privilege_escalation] becometrue become_methodsudo become_userroot become_ask_passfalse优先级顺序ansible配置文件可以存到不同的地方1. 环境变量ANSIBLE_CONFIG2. 当前目录下的ansible.cfg3. 当前用户家目录下的.ansible.cfg4. /etc/ansible/ansible.cfgansible主机清单清单的书写格式配置单文件时需要指定主机组使用[xxx] 中括号进行设置中括号下的主机组来执行ansible命令。定义主机清单的方式1.自定义主机vim /etc/ansible/hosts node1 node2 192.168.1.1 192.168.1.22.自定义用户组[webservers] web1 web23.特殊的主机组#ungroup实际上就是不属于任何主机组的主机就相当于你直接定义主机 [ungroup] abc4.批量定义web[1:10].example.com 192.168.1.[1:10] //采用数组的形式定义5.主机组嵌套[servers:children] webservers mysqlservers主控节点和被控节点主控节点(客户端、主设备)可以连接多个被控节点设备服务于被控节点。主设备执行命令连接多个从设备后可停留在主设备中执行命令。如要删除rm -rf 删除从设备的文件不用回到从设备(只用挂起)只要建立了ssh底层的连接可直接在主设备中执行该命令。被控节点(服务端、从设备)远程连接被控节点两种方式主机清单路径/etc/ansible/hosts默认情况下/etc/ansible/hosts文件是空的需要手动添加内容使用vim /etc/ansible/hosts进入添加内容1.用户名、密码进入 /etc/ansible/hosts 设置[node1] 192.168.108.129 ansible_ssh_port22 ansible_ssh_userroot ansible_ssh_pass123456 192.168.108.130 ansible_ssh_port22 ansible_ssh_userroot ansible_ssh_pass123456 #port端口 user用户 pass密码 退出编辑 执行ansible -i /etc/ansible/hosts node1 -m ping2.ssh密钥连接被控节点ssh分为公玥public和私玥private在ansible设备上生成ssh密钥把密钥发送给客户端ssh - keygen密钥生成后把密钥发送给客户端可使的ansible服务端(主控节点)使用密钥来服务客户端(被控节点)ssh-copy-id devops192.168.108.130 #devops是远程主机用户名 192.168.108.130是devops远程主机的IP地址通过输入ipconfig查看主机上的ip地址 验证: ssh devops192.168.108.130 //免密登录不需要登录密码 登陆后退出执行 exit //退出除了可以使用ip地址外还可以使用域名远程主机名别名在主设备执行被控制节点操作1. 创建devops用户并且设置密码ansible all -m shell -a useradd devops -uroot -k ansible all -m shell -a echo 1 | passwd --stdin devops -uroot -k2. 给devops用户配置sudo提权ansible all -m shell -a echo devops ALL(ALL) NOPASSWD:ALL /etc/sudoers -uroot -k3.使用输出内容echo redhatansible all -m shell -a echo redhatansible all -m ping //测试通信 node2 | SUCCESS { ansible_facts: { discovered_interpreter_python: /usr/bin/python }, changed: false, ping: pong } node1 | SUCCESS { ansible_facts: { discovered_interpreter_python: /usr/bin/python }, changed: false, ping: pong }遇到过的问题1.采用本地ios镜像文件安装ansible遇到的问题This system is not registered with an entitlement server. You can use subscription-manager to register. Error: There are no enabled repositories in /etc/yum.repos.d, /etc/yum/repos.d, /etc/distro.repos.d.问题解释说明RHEL系统未注册订阅自带官方YUM源禁用没用可以启用的软件源文件yum无法安装软件因此我采用的是把RHEL切换到centos7镜像的方式2.在使用pip工具安装ansible查看ansible --version出现[rootservera ~]# ansible --version -bash: /usr/bin/ansible: 没有那个文件或目录问题解释说明shell有限去/user/bin/ansible找实际文件在/usr/local/bin/ansible 两边的路径对不上我使用的解决方法echo export PATH$PATH:/usr/local/bin /etc/profile source /etc/profile ansible --version3.ansible配置文件建立连接遇到的问题WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match all问题解释说明没有发现Inventory路径hosts主机清单是空的只有localhost可以利用 不能使用all未建立连接localhost是自带的隐藏式我使用的解决方法#配置主机清单 [node-group] //定义的主机清单用户组 servera ansible_hosts192.168.108.130 #测试 ansible all --list-host //列出清单中的主机 ansible all -m ping #主控节点要生成密钥 ssh - keygen -t rsa -N -f /root/.ssh/id_rsa #推送公玥给被控节点 ssh-copy-id devops192.168.108.130 ssh devops192.168.108.130--森bright