Я отлаживаю создание пользовательского AMI, и мне не ясно, как EC2 фактически устанавливает открытый ключ вашей пары ключей на ваш AMI... Я предполагаю, что он переходит в ~ someuser/.ssh/authorized_keys, но я не могу понять если это делается ровно один раз, при каждой загрузке или о том, как определяется целевой пользователь.
Как EC2 устанавливает открытый ключ из вашей ключевой пары?
Ответ 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
Надеюсь, что это поможет.