蓝易云 - 解答Ansible在多IP配置中known_hosts报错问题

在使用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 文件报错问题,并非唯一方法但能够有效减少此类报错影响正常部署流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值