Как EC2 устанавливает открытый ключ из вашей ключевой пары?

Я отлаживаю создание пользовательского AMI, и мне не ясно, как EC2 фактически устанавливает открытый ключ вашей пары ключей на ваш AMI... Я предполагаю, что он переходит в ~ someuser/.ssh/authorized_keys, но я не могу понять если это делается ровно один раз, при каждой загрузке или о том, как определяется целевой пользователь.

Ответ 1

Более конкретно cloud-init - это модуль Python, который запускается каждый раз при запуске экземпляра.

Вы можете просмотреть код здесь:

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

Эти части, которые получают ключ, являются файлами DataSource.py и DataSourceEc2.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/, затем они копируют этот ключ в файл user-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

Надеюсь, что это поможет.