[さくら][クラウド]スタートアップスクリプトで環境構築


さくらのクラウドでは、OSインストール直後やインスタンス起動時にrootユーザでスタートアップスクリプトを実行してくれる機能があります。OSにCentOS 6.5(本稿執筆当時)を選択してインスタンスを起動したときに、一般ユーザができていたり(しかも公開鍵認証でログイン!)、yumでパッケージを最新化したいので、これを自動化することにしました。また、デフォルトのsshd_configではUseDNSがyesになっていたりGSSAPIが有効になっていたりするので、ログイン時に時間がかかる場合があります。なので、これらも無効化してしまいます。

まずはソースコード。

#!/bin/bash
# @sacloud-once

LANG=C
ADDUSER=hamada
ID_RSA_PUB="ssh-rsa AAAAB3NzaC〜〜〜(略)"

useradd ${ADDUSER}
echo $(cat /dev/urandom | tr -dc '[:alnum:]' | head -c 8) | passwd --stdin ${ADDUSER}
cp -p /etc/sudoers /etc/sudoers.orig
echo ${ADDUSER}$'t'ALL=(ALL)$'t'$'t''NOPASSWD: ALL' >> /etc/sudoers
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
sed -i 's/#UseDNS yes/#UseDNS yesnUseDNS no/;s/#GSSAPIAuthentication no/GSSAPIAuthentication no/;s/GSSAPIAuthentication yes/#GSSAPIAuthentication yes/;s/^GSSAPICleanupCredentials yes/GSSAPICleanupCredentials no/;s/#GSSAPIStrictAcceptorCheck yes/GSSAPIStrictAcceptorCheck no/;s/#GSSAPIKeyExchange no/GSSAPIKeyExchange no/' /etc/ssh/sshd_config
mkdir /home/${ADDUSER}/.ssh
chmod 700 /home/${ADDUSER}/.ssh
touch /home/${ADDUSER}/.ssh/authorized_keys
chmod 600 /home/${ADDUSER}/.ssh/authorized_keys
echo ${ID_RSA_PUB} > /home/${ADDUSER}/.ssh/authorized_keys
chown -R ${ADDUSER}. /home/${ADDUSER}/.ssh
yum -y update
reboot

まず最初に「# @sacloud-once」と記述していますが、こちらによるとインストール後に1回だけ実行することを意味しています。変数「ADDUSER」の箇所に、追加したいユーザ名を指定することで、好きなユーザ名を登録できるようにしています。また、変数「ID_RSA_PUB」の箇所には、鍵ペアのうち公開鍵を登録するようにしています。

sedコマンドで/etc/ssh/sshd_configの編集をしていますが、明確にUsePAMをnoにしているわけではないので、追加するユーザのパスワードは/dev/urandomから8桁で作成するようにしています。もしパスワード認証でログインしたい場合は、echoの後にパスワードをベタ書きしてもよいかも知れませんが、セキュリティ上おすすめしません。

また、このスクリプトで追加したユーザには、NOPASSWDでsudoできるようにしています。

さくらのVPSでは初回インストール時にyumでパッケージを最新化してくれるのですが、クラウドでは自分でしなければなりません。ですので、最後に「yum -y update」を行い、再起動するようにしました。

これにより、インスタンスが起動して数分待つと一般ユーザでログインできる、最新のOSができあがります。コンソールから見てログインプロンプトが表示されていればOKです。

途中のsed芸で、PermitRootLoginをnoにしたりするなど、sshd_configの設定をやりきってしまってもよいかも知れませんね。それでは皆さん、自動化で楽々クラウドライフを!

[amazonjs asin="4777931390" locale="JP" title="クラウドサービスビジネス活用術 (エイムック 2820)"]