※cloud-initの機能はクラウドサービスやOSによって使える機能が微妙に異なっていたりするので、ここではAWSのAmazon Linux 2を前提としますが、他の環境でもだいたい応用できるかと思います。
EC2でインスタンスを立てる際に「SSHのポート変更と公開鍵の追加設定もcloud-initでできたらなー」「Ansible使うほどじゃないんだよなー」と色々調べてたらどうにかなったというお話です。
背景
- Terraformなどで自動化してEC2インスタンスを立てる
- インスタンスを立てる際に、SSHのポート変更と鍵の追加も自動でやりたい
- インスタンス作成時にキーペアを設定できるが(ひとつしか設定できないので)、複数(メンバー全員分)の公開鍵を追加したい
- Ansibleは使わない1
やり方
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAAAB3Nza...
- ssh-ed25519 AAAAC3Nza...
runcmd:
- sed -i -e 's!#Port 22!Port 12345!' /etc/ssh/sshd_config
- systemctl restart sshd.service
こんな感じでいけました。
鍵の追加
ssh_authorized_keys
なんて設定があるんですね。
これを設定するとec2-user
のauthorized_keys
に全部追加されました。
SSHポートの変更
SSHのポート変更については、そのような設定はないようなので、runcmd
でsed
を叩いて設定を書き換えることにします。
この辺はディストリビューションなどによって変わってくることもあるかもしれないので、確認の上調整してください。
あとはセキュリティグループや各種ファイアウォール等のポート変更も忘れないようにしましょう。
(参考)個別にユーザを作る場合
ec2-user
にみんなの鍵を追加するのではなく、個別にユーザを作る場合はこんな感じです。
#cloud-config
users:
- default
- name: ansible
gecos: ansible
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
ssh_pwauth: False
ssh_authorized_keys:
- ssh-rsa AAAAB3Nza...
users
に個別のユーザ設定を並べて、その中でssh_authorized_keys
を設定してあげます。
本題とは関係ありませんが、users
設定を使うときに最初のdefault
を忘れるとデフォルトユーザが作成されなくなるので注意が必要です。
この場合だとansible
ユーザだけが作成されて、普段ならあるはずのec2-user
は作成されなくなります。たぶん(やったことないからわからない)。
先頭にdefault
を追加することで、ここに書いてあるユーザ+いつも自動作成されるデフォルトユーザの両方が作成されるようになります。
-
別にAnsibleが嫌いなわけではないです。今回は他にAnsibleでやる作業もなかったので、cloud-initだけでゴリ押せないかなと挑戦してみただけです。 ↩