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/