下記のようにcloud-initで、EC2起動時にいろいろな処理を行う方法を紹介してきました。
cloud-initでEBSのリサイズを起動時に自動で行う(CentOS6)
cloud-initで"/etc/hosts"にホスト名を追加を自動で行う(CentOS6)
今回はEC2起動時の基本的な処理である、Key Pairの公開鍵を.ssh/authorized_keysに登録する処理をcloud-initで
実現してみます。
(内容としては、設定ファイルの調整のみです)
○設定ファイルの調整とリブート
これまでと同様にrootでのログインにするため、下記のようにuser, disable_root, ssh_genkeytypesを指定して、
cloud_init_modulesにsshも追加しておきます。
# cat /etc/cloud/cloud.cfg manage_etc_hosts: localhost user: root disable_root: false ssh_genkeytypes: [ rsa, dsa ] cloud_init_modules: - resizefs - update_etc_hosts - ssh ...
設定できたらリブートします。
# reboot
○.ssh/authorized_keysとログの確認
.ssh/authorized_keysは次のように登録されていることが確認できました。
(これにより、SSHでのログインも成功しています)
# cat /root/.ssh/authorized_keys ssh-rsa AAAA...AAAA suz-lab_ap-northeast-1
ログ(/var/log/cloud-init.log)も下記のように該当するものが出力されています。
Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] cloud-init[INFO]: cloud-init start running: Thu, 27 Dec 2012 09:15:34 +0000. up 9.67 seconds Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] __init__.py[DEBUG]: searching for data source in ['DataSourceNoCloudNet', 'DataSourceConfigDriveNet', 'DataSourceOVFNet', 'DataSourc2'] Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] DataSourceEc2.py[DEBUG]: removed the following from metadata urls: ['http://instance-data:8773'] Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] DataSourceEc2.py[DEBUG]: Using metadata source: 'http://169.254.169.254' Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] DataSourceEc2.py[DEBUG]: crawl of metadata service took 0s Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] __init__.py[DEBUG]: found data source DataSourceEc2 Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] cloud-init[DEBUG]: found data source: DataSourceEc2 Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] __init__.py[DEBUG]: handling bootcmd with freq=None and args=[] Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] __init__.py[DEBUG]: handling resizefs with freq=None and args=[] Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] cc_resizefs.py[DEBUG]: resizing root filesystem (type=ext4, maj=202, min=65) Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] __init__.py[DEBUG]: handling set_hostname with freq=None and args=[] Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] cc_set_hostname.py[DEBUG]: populated /etc/hostname with ip-10-0-32-171 on first boot Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] __init__.py[DEBUG]: handling rsyslog with freq=None and args=[] Dec 27 18:15:34 ip-10-0-32-171 [CLOUDINIT] __init__.py[DEBUG]: handling ssh with freq=None and args=[]