如何将使用ec2模块创建的EC2实例添加到〜/ .ssh / known_hosts?

时间:2018-04-04 15:52:55

标签: ssh ansible

假设我在名为site.yml的文件中有这个ec2任务(取自documentation):

# Basic provisioning example
- 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

假设我将ec2模块结果注册到名为ec2_instances的变量中,我该怎么做才能将单个ec2实例添加到我的〜/ .ssh / known_hosts文件中,以便我可以轻松地ssh到新实例中?

我查看了known_hosts模块,其示例是:

- name: tell the host about our servers it might want to ssh to
  known_hosts:
  path: /etc/ssh/ssh_known_hosts
  name: foo.com.invalid
  key: "{{ lookup('file', 'pubkeys/foo.com.invalid') }}"

除了关键属性,每个属性对我都有意义。关于查找插件,我没有任何文件包含我的新实例的公钥(我知道)。我应该为关键财产提供什么?

关键属性的文档是:

  

SSH公共主机密钥,作为字符串(如果state = present则需要)   state = absent时可选,在这种情况下,主机的所有键都是   去除)。密钥必须采用正确的ssh格式(参见sshd(8),   “SSH_KNOWN_HOSTS FILE FORMAT”部分)

我查看了sshd(8)manual entry,这里是相关段落(强调我的):

  

这些文件中的每一行都包含以下字段:标记   (可选),主机名,密钥类型,base64编码的密钥,评论。该   字段用空格分隔。

     

keytype和base64编码的直接来自主机   的;例如,它们可以从中获得   /etc/ssh/ssh_host_rsa_key.pub。可选的注释字段继续   该行的结尾,并未使用。

如何获取我需要添加到〜/ .ssh / known_hosts文件的密钥?这听起来像是一项常见的任务,所以在我提出可能不必要的努力来构建我自己的解决方案之前,我想我会检查一下我是否只是遗漏了一些东西。

谢谢!

0 个答案:

没有答案