概要
SBクラウドのAlibaba Cloudで提供されている仮想サーバーECSでは、現状SSH公開鍵認証での初期構築がサポートされておらず、パスワード認証によって環境が構築されます。これはセキュアじゃないので、「インスタンス自動化設定フレームワーク」によって初期設定を行うサンプルです。
インスタンス自動化設定フレームワーク・・・要するにcloudinitなんですが、どうにも呼び名にはいろいろあるらしいです。コンソールでは「ユーザーデータ」ですね。
参考:Alibaba Cloudドキュメント インスタンス自動化設定フレームワーク
用意するスクリプト
こんなの用意します。
#!/bin/sh
/bin/sed -ie 's/PasswordAuthentication yes/PasswordAuthentication no/'
/etc/ssh/sshd_config
systemctl restart sshd
echo 'ssh-rsa あなたのSSH公開鍵' | tee -a /root/.ssh/authorized_keys
sshd_configのPasswordAuthenticationをoffにして再起動し、rootのauthorized_keysに公開鍵を追記するシェルスクリプトです。
コンソールからの設定
ECSコンソールからインスタンス作成時、「ユーザーデータ」の項目に貼り付けます。
![スクリーンショット 2017-04-24 23.32.44.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F115338%2Ff92a469c-ae69-3c77-4b37-d6cb29f55f71.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=850c918c2adac3151545ddead91b9539)
サイズが16kBを超えないように、という制限がありますので注意が必要ですが、SSHキーくらいなら絶対超えません。とりあえずUbuntuとCentOS辺りならこれでOKのはず。
インスタンスを起動
あとは普通にインスタンスが起動してくるのを待つだけです。出来上がったECSにSSHキーでログイン出来ることを確認してください。また、存在しないユーザー(root_testとか)でログインを試みて、「Permission denied (publickey,gssapi-keyex,gssapi-with-mic).」とか言われること(パスワードプロンプトが返ってこないこと)を確認してください。
雑に簡単にセキュア
とりあえず、最も典型的なユーザーデーターの使い方を雑に書いてみました。実際、クラウドプラットフォームの多くはこの処理と同じように、cloudinitの仕組みを用いてSSHキーを設定していますし、ユーザーデータの挙動を確認するにも丁度良いかなと思います。ユーザーデータは外部からのincludeやAPIでの設定もできて、インフラのコード化も進められますし、是非活用したいですね。
てゆっか、速くコンソールでSSHキー管理できるようにならないかなぁ〜。