2014-03-05 40 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