You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Ansible EC2模块创建的EC2实例添加至~/.ssh/known_hosts?

解决方案:用Ansible自动将EC2实例添加到~/.ssh/known_hosts

好问题!我刚好处理过类似的场景,其实Ansible有专门的模块可以帮你搞定这个——known_hosts模块,搭配你已经注册的ec2_instances变量就能轻松完成。

完整Playbook示例

把下面的任务追加到你的site.yml里,放在EC2实例创建任务之后即可:

# 先创建EC2实例并注册结果
- ec2:
    key_name: mykey
    instance_type: t2.micro
    image: ami-123456
    wait: yes
    group: webserver
    count: 3
    vpc_subnet_id: subnet-29e63245
    assign_public_ip: yes
  register: ec2_instances

# 将每个新实例的主机密钥添加到known_hosts
- name: Add EC2 instances to ~/.ssh/known_hosts
  known_hosts:
    path: ~/.ssh/known_hosts
    name: "{{ item.public_ip }}"
    key: "{{ lookup('pipe', 'ssh-keyscan -t rsa ' ~ item.public_ip) }}"
    state: present
  loop: "{{ ec2_instances.instances }}"
  delegate_to: localhost

关键细节解释

  • 循环遍历实例:loop: "{{ ec2_instances.instances }}"会逐个处理你创建的3台EC2实例,ec2_instances.instances里包含了每台实例的公网IP、私有IP等所有元数据。
  • 自动获取主机密钥:用lookup('pipe', ...)调用ssh-keyscan命令,自动抓取目标IP的RSA主机密钥,完全替代手动输入确认的步骤。
  • 控制节点修改:delegate_to: localhost确保任务在你的Ansible控制节点上执行,修改的是控制节点的~/.ssh/known_hosts文件——毕竟你是从这里SSH连接EC2实例的。

额外优化建议

  1. 私有IP场景:如果是在VPC内部通过私有IP访问实例,把item.public_ip换成item.private_ip就行。
  2. 多密钥类型支持:想要更安全的话,可以同时获取RSA和ECDSA密钥,把命令改成ssh-keyscan -t rsa,ecdsa {{ item.public_ip }}。
  3. 避免重复添加:state: present参数会自动跳过已存在的主机记录,不会在known_hosts里生成重复条目。

这样操作后,你直接SSH连接新EC2实例时,就不会再弹出烦人的主机密钥确认提示啦!

内容的提问来源于stack exchange,提问作者Tim Stewart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:46:10