ansible使用【1】--初次使用

前言:

  • ansible是自动部署工具,就是我有一个服务器A,需要控制B,C,D 3个服务器。
  • 只需要再A上进行安装ansible,并且知道B,C,D 3个服务的密码,就可以控制他们。
  • 且B,C,D本身不需要其他的操作。
  • 而其他的部署工具,是需要再BCD上安装软件的。
  • 更多的ansible介绍:https://ansible.leops.cn/basic/Introduction/

使用场景:

  • 我有一批测试机器,每次这批机器都要会升级系统。升级系统后里面是干干净净的(啥也没有)。
  • 而我的任务就是,每次升级后,放置一些工具包到这批机器上,并执行任务,执行结果记录下来。
  • 我的困难,就是每次升级后,都要重新去放置这些包。
  • 因为我会有N个的机器,所以,用挂载的方式,带宽不够,且影响性能,所以,我打算用anible来试试。

 

我的环境是:

  • 主控机器是:Ubuntu 20.04 IP:192.168.49.160
  • 被控制的机器是:IP :192.168.53.225

1.安装:

  • 都是在主控机器上安装,我这里是192.168.49.160
  • sudo apt update
    sudo apt install software-properties-common
    sudo apt-add-repository --yes --update ppa:ansible/ansible
    sudo apt install ansible
  •  

2.bash命令补全

  • 感觉这一步不是很需要,因为我是参考别人的,所以就执行了。(=.=)
  • # 方式1:用apt
    sudo apt install python-argcomplete    # 我这里失败了,我用下面这个
    # 方式2: 用Python的pip
    pip install argcomplete

 

  • 将补全加入环境变量里:
  • activate-global-python-argcomplete
    source /etc/profile

3.定义主机清单

  • 打开host编辑
  • sudo vim /etc/ansible/hosts
  • 输入如下内容:(密码根据你实际的更改)
  • [remote]
    192.168.53.225
    
    [remote:vars]
    ansible_ssh_user='liqi'
    ansible_ssh_pass='Liqi123+'
  •  

 

4.测试一下:

ansible 192.168.53.225 -m ping

遇到报错:

AI帮我解决的:

  这个报错提示是由于远程主机的 SSH 主机密钥发生了变化,导致无法建立 SSH 连接。这通常是由于远程主机重新安装或配置导致的。为了解决这个问题,你可以按照提示中的建议,执行以下命令来删除已知主机密钥并重新建立连接:

ssh-keygen -f "/home/liqi/.ssh/known_hosts" -R "192.168.53.225"

这将删除 known_hosts 文件中与远程主机 192.168.53.225 相关的条目。然后,再次运行 ansible 192.168.53.225 -m ping 命令,应该就能成功建立 SSH 连接了。

个人说明:  

  应该是我之前对53.225增加过ssh的秘钥配置导致的。执行一遍AI的提示命令就好了

 

5.继续测试: 

ansible 192.168.53.225 -m ping

又遇到报错 

问AI解决:

这个错误消息表明在使用Ansible时,你正在尝试通过SSH密码进行连接,但同时又启用了主机密钥检查。Ansible默认要求使用SSH密钥对进行连接,并且要求已将目标主机的公钥添加到`known_hosts`文件中以进行主机密钥检查。
 
要解决这个问题,你可以考虑以下几种方法:
 
1. 使用SSH密钥对: 推荐使用SSH密钥对来进行连接,而不是密码。确保你的SSH密钥已经生成并且可以成功连接到目标主机。然后,在Ansible的主机清单中指定使用SSH密钥进行连接。
 
2. 禁用主机密钥检查: 如果你坚持使用SSH密码,并且不想进行主机密钥检查,可以通过修改Ansible的配置文件来禁用它。打开`ansible.cfg`文件(如果没有,可以创建一个),并添加以下内容:
 
   ```ini
   [defaults]
   host_key_checking = False
   ```
 
   请注意,禁用主机密钥检查会减弱安全性,因为它允许连接到未知主机。只有在非生产环境或信任的网络中才建议使用此选项。
 
3. 将目标主机的公钥添加到`known_hosts`文件:如果你想继续启用主机密钥检查并使用SSH密码,那么你需要将目标主机的公钥添加到`known_hosts`文件中。你可以手动执行SSH连接到目标主机,然后接受密钥,并将其添加到`~/.ssh/known_hosts`文件中。然后再次运行Ansible任务。
 
选择哪种方法取决于你的具体需求和安全策略。最佳实践是使用SSH密钥对,因为它更加安全和可维护。

 

个人说明:

  • ansible默认启用了ssh检查。
  • 关掉就行,因为我的服务器将来会刷系统,我这里用秘钥就不灵活,我就选择方式2解决。
  • 编辑ansible的配置文件ansible.cfg:
  • sudo vim /etc/ansible/ansible.cfg
  • 不用管里面的内容:
  • 输入以下内容:
  • [defaults]
    host_key_checking = False

 

6.继续执行测试:

ansible 192.168.53.225 -m ping

 

成功了!!!!

 

这里解释一下成功的内容:

还是问AI:

这个输出表示Ansible成功连接到主机 192.168.53.225 并执行了一个ping模块的任务。让我们来解释这个输出中的信息:

  • 192.168.53.225 是目标主机的IP地址。

  • SUCCESS 表示任务成功执行。

  • ansible_facts 是一个包含有关目标主机的信息的字典。在这里,它提供了目标主机上的 Python 解释器路径(/usr/bin/python3),这对于执行 Ansible 模块是很重要的,因为 Ansible 使用 Python 来与目标主机进行通信。

  • changed 是一个布尔值,指示在执行任务期间是否发生了更改。在这里,它为 false,表示任务未引起系统状态的更改。这通常用于跟踪 Ansible 任务是否执行了实际操作。

  • ping 是执行的 Ansible 模块,通常用于测试与主机的连接。在这里,它返回了 "pong",表明连接正常。

总之,这个输出表明你的 Ansible 任务成功连接到目标主机,并且目标主机上的 Python 解释器是 /usr/bin/python3,任务本身未引起系统更改,而且与目标主机的连接正常。这通常是一个成功的任务执行的标志。

 

参考资料:

https://www.jianshu.com/p/c48b4a24c7d4

https://ansible.leops.cn/basic/Quickstart/

chatGPT https://chat.openai.com/

 

posted @ 2023-10-20 10:51  o蹲蹲o  阅读(22)  评论(0编辑  收藏  举报