【Ansible】Ansible 连接主机显示报错的处理方案

本文详细介绍了在使用Ansible进行SSH连接时遇到的问题及其解决方案,包括:生成并添加SSH密钥,禁用主机键检查,解决缺少JSON模块问题,处理初始化运行时的key错误,以及安装必要的依赖包。

一、在ansible安装完毕后一般需要以SSH的方式连接到需要进行管理的目标主机,一开始遇到了如下问题:

192.168.15.4 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", 
    "unreachable": true
}
192.168.15.55 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", 
    "unreachable": true

原因分析:
没有在ansible管理节点(即安装ansible的节点)上添加目标节点(即需要管理的节点)的ssh认证信息。

解决步骤:

1:管理节点生成SSH-KEY

#ssh-keygen

成功后在~/.ssh/路径下将生成ssh密钥文件:id_rsa及id_rsa.pub
2:添加目标节点的SSH认证信息

#ssh-copy-id root@目标节点IP

这里root是在目标节点上登录的用户,@符号后面接目标节点IP即可,之后会提示输入目标节点root用户密码,输入即可。
添加认证信息后,目标节点主机的~/.ssh/目录下将会出现一个authorized_keys文件,里面包含了ansible管

### 解决方案 在使用 `ansible-playbook` 安装 MySQL 时遇到错误,可能的原因有很多。以下是常见的几种原因及其对应的解决方案: #### 1. 配置文件缺失或不正确 如果 `/srv/httpd.conf` 文件不存在,则可能会导致执行失败[^1]。虽然此问题主要涉及 Apache 的配置,但在类似的场景下,确保所有必需的配置文件存在是非常重要的。 对于 MySQL 的安装,通常需要创建相应的角色目录结构并编写正确的 YAML 文件。例如,在以下命令中,如果没有按照标准的角色结构创建必要的子目录和文件,可能导致错误: ```bash [root@Ansible ~]# touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml ``` 上述命令用于初始化 MySQL 角色所需的文件夹结构。如果这些文件夹中的某些部分缺少或者命名不符合 Ansible 的约定俗成(如必须命名为 `main.yml`),则可能导致任务无法正常加载[^2]。 #### 2. Playbook 编写不当 Playbook 是由一个或多个 plays 构成的任务清单。每个 play 负责将特定组内的主机映射到预定义的角色上。下面是一个典型的 MySQL 安装 playbook 示例[^3]: ```yaml --- - hosts: dbservers remote_user: root roles: - mysql ``` 在此基础上,还需要进一步细化 tasks 和 handlers 来完成具体的安装操作。例如,可以通过调用模块来实现软件包管理和服务控制等功能: ```yaml tasks: - name: Ensure MySQL is installed yum: name: mariadb-server state: present - name: Start and enable MySQL service service: name: mariadb state: started enabled: yes ``` 以上代码片段展示了如何利用 YUM 模块安装 MariaDB (作为 MySQL 替代品),以及启动服务的相关设置。 #### 3. Shell 命令重复执行引发冲突 有时为了简化流程,开发者会在同一个 task 下多次运行相同的 shell 或 command 指令。然而这种做法容易引起不必要的副作用甚至逻辑混乱。例如引用中的例子显示了四次几乎完全一样的命令被执行[^4]: ```yaml shell: echo '10.93.102.200 test.wei.com' >> /etc/hosts ``` 这不仅增加了冗余度还提高了潜在风险——当目标路径权限受限或其他异常情况发生时,整个过程都可能中断从而造成最终状态不确定的结果。 因此建议改用更高效的方式处理此类需求,比如借助 lineinfile 模块代替原始 shell 方法更新配置项: ```yaml - name: Add hostname entry to /etc/hosts lineinfile: path: /etc/hosts regexp: '^10\.93\.102\.200' line: '10.93.102.200 test.wei.com' state: present ``` 这样既保证了一致性和可维护性又减少了人为失误的可能性。 --- ### 总结 综上所述,要解决 `ansible-playbook` 在安装 MySQL 过程中存在的各种问题可以从以下几个方面入手:确认所有的前置条件均已满足;仔细检查所使用的剧本语法是否准确无误;合理规划各项具体活动之间的关系以避免相互干扰等情况的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值