在使用Ansible进行自动化部署和配置管理时,可能会遇到 known_hosts文件相关的错误。这通常发生在Ansible尝试通过SSH连接到远程主机时,SSH客户端检查远程主机的公钥是否已经记录在本地用户的 known_hosts文件中。如果没有记录或者公钥发生了变化,SSH客户端会拒绝连接并抛出错误。

要解决这个问题,请按照以下步骤操作:

  1. 关闭StrictHostKeyChecking
    可以通过修改Ansible配置或者直接在命令行中设置环境变量来关闭StrictHostKeyChecking。这将允许Ansible连接到未知的主机而不需要交互式地确认密钥。

    ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
  2. 使用ssh-keyscan更新known_hosts
    在运行ansible-playbook之前,可以使用ssh-keyscan工具来扫描目标服务器的SSH密钥,并将其添加到本地用户目录下的 .ssh/known_hosts文件中。

    ssh-keyscan -H <hostname_or_ip> >> ~/.ssh/known_hosts
  3. 清理旧密钥
    如果服务器重新安装了操作系统或更换了SSH密钥,则需要从 .ssh/known_hosts文件中删除旧有条目以避免冲突。
ssh-keygen -R <hostname_or_ip>
  1. 自动处理新键值对
    使用ansible-playbook参数 --ssh-extra-args='-o UserKnownHostsFile=/dev/null', 这样可以临时忽略掉已知主机文件,在某些临时环境和测试场景下非常有用。
  2. 管理多个版本系统上不同IP地址对应相同hostname问题:
    如果你有多个版本系统(如开发、测试、生产)并且它们共享相同域名但IP地址不同,则可能需要为每一个环境维护一个单独版本控制下得 knows_host_file, 并通过ansible配置指定它们:
[dev]
host1 ansible_host=192.x.x.x

[test]
host1 ansible_host=193.x.x.x

[prod]
host1 ansible_host=194.x.x.xx

[all:vars]
ansible_user=myuser

[dev:vars]
ansible_ssh_common_args='-o UserKnownHostsFile=./env/dev/.knows_host_file'

[test:vars]
ansible_ssh_common_args='-o UserKnownHostsFile=./env/test/.knows_host_file'

[prod:vars] 
ansbile_ssh_common_args='-o UserKnowsnHotsFile=./env/prod/.knowsn_hots_file'
  1. 使用 Ansible 的 add host key module:
    Ansible 提供了一个模块用于自动添加新 SSH 密匙至 known hosts 文件, 这样可以确保每次运行 playbook 前都是最新可信任 SSH 密匙。
- name : Add new host key to the known hosts file.
hosts : all 
tasks :
- name : Scan for new ssh host key.
add_hos_key :
name : "{{ inventory_hostname }}"

7 . 定期更新你得 SSH 密匙:
定期更新你得 SSH 密匙是一种好习惯, 可以提高安全性, 同样也要确保 Ansibl 知道最新可信任得 SSH 密匙.

8 . 使用 Ansibl Vault 管理敏感信息:
对于存储敏感信息如密码等, 应该使用 Ansbile Vault 来加密存储.

9 . 监控与审计:
对于所有与 security 相关操作应该进行监控与审计.

10 . 故障排除文档化:
当出现问题解决后应该文档化处理过程及结果供未来参考.

以上步骤提供一种方法论去解决和优化 Ansibl 在处理多 IP 配置过程当中可能遇见关于 known hosts 文件报错问题,并非唯一方法但能够有效减少此类报错影响正常部署流程。

云服务器/高防CDN推荐

蓝易云国内/海外高防云服务器推荐


海外免备案云服务器链接:www.tsyvps.com

蓝易云安全企业级高防CDN:www.tsycdn.com

持有增值电信营业许可证:B1-20222080【资质齐全】

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。


百度搜索:蓝易云

蓝易云是一家专注于香港及国内数据中心服务的提供商,提供高质量的服务器租用和云计算服务、包括免备案香港服务器、香港CN2、美国服务器、海外高防服务器、国内高防服务器、香港VPS等。致力于为用户提供稳定,快速的网络连接和优质的客户体验。
最后修改:2023 年 12 月 16 日
如果觉得我的文章对你有用,请随意赞赏