2014-03-05 41 views
12

我正在调试自定义AMI的创建,但我不清楚EC2实际上是如何将您的密钥对的公钥安装到您的AMI上的......我认为它会进入〜someuser/.ssh/authorized_keys,但我无法弄清楚如果这只是完成一次,每次启动,或目标用户如何确定。EC2如何从您的密钥对安装公钥?

+0

它使用一个名为cloud-init的系统。我认为元数据服务上也有关键。 – datasage

回答

15

更具体地cloud-init是一个Python模块,每次启动实例时都会运行。

您可以通过这里的代码浏览:

/usr/lib/python2.7/dist-packages/cloudinit 

他们那部分拿到钥匙是DataSource.pyDataSourceEc2.py文件。他们使用URL查询元数据:http://169.254.169.254/2011-01-01/meta-data/public-keys/

找到使用该URL的密钥列表,然后从中选择一个。 (通常是一个)。最终他们查询:http://169.254.169.254/2011-01-01/meta-data/public-keys/0/openssh-key/然后他们将该密钥复制到默认的cloud-init用户的~/.ssh/authorized_keys文件中。

默认的cloud-init用户(以及所有cloud-init配置)在/etc/cloud/cloud.cfg文件中定义。这摘录一个cloud.cfg文件:

user: ubuntu 
disable_root: 1 
preserve_hostname: False 
# datasource_list: ["NoCloud", "ConfigDrive", "OVF", "MAAS", "Ec2", "CloudStack"] 

cloud_init_modules: 
- bootcmd 
- resizefs 
- set_hostname 
- update_hostname 
- update_etc_hosts 
- ca-certs 
- rsyslog 
- ssh 

cloud_config_modules: 
- disk-setup 
- mounts 
- ssh-import-id 
- locale 
- set-passwords 
- grub-dpkg 
... 

这基本上是一个yaml格式的配置文件。

有关更多信息,云计算的初始化,您可以在这里阅读他们的公开文档:

http://cloudinit.readthedocs.org/en/latest/index.html

希望这有助于。

+0

辉煌,谢谢! – apinstein