さくらのクラウドでは、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)"]