我正在调试自定义AMI的创建,我不清楚EC2如何将你的密钥对的公钥实际安装到你的AMI上...我认为它进入~someuser / .ssh / authorized_keys,但我无法想象如果只完成一次,每次启动,或者如何确定目标用户,则输出。
答案 0 :(得分:17)
更具体地说,cloud-init
是一个Python模块,每次实例启动时都会运行。
您可以在此处浏览代码:
/usr/lib/python2.7/dist-packages/cloudinit
获取密钥的部分是DataSource.py
和DataSourceEc2.py
文件。他们使用以下网址查询元数据: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
格式的配置文件。
有关cloud-init的更多信息,您可以在此处阅读其公开文档:
http://cloudinit.readthedocs.org/en/latest/index.html
希望这有帮助。