概要
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コンソールからインスタンス作成時、「ユーザーデータ」の項目に貼り付けます。
サイズが16kBを超えないように、という制限がありますので注意が必要ですが、SSHキーくらいなら絶対超えません。とりあえずUbuntuとCentOS辺りならこれでOKのはず。
インスタンスを起動
あとは普通にインスタンスが起動してくるのを待つだけです。出来上がったECSにSSHキーでログイン出来ることを確認してください。また、存在しないユーザー(root_testとか)でログインを試みて、「Permission denied (publickey,gssapi-keyex,gssapi-with-mic).」とか言われること(パスワードプロンプトが返ってこないこと)を確認してください。
雑に簡単にセキュア
とりあえず、最も典型的なユーザーデーターの使い方を雑に書いてみました。実際、クラウドプラットフォームの多くはこの処理と同じように、cloudinitの仕組みを用いてSSHキーを設定していますし、ユーザーデータの挙動を確認するにも丁度良いかなと思います。ユーザーデータは外部からのincludeやAPIでの設定もできて、インフラのコード化も進められますし、是非活用したいですね。
てゆっか、速くコンソールでSSHキー管理できるようにならないかなぁ〜。