VultrのStartupScriptでUbuntuの設定を簡略化

2018/9/2
apt upgradeのダイアログで実行が止まらないよう変更

ちょっとした用途で一時的なVPSサーバを借りるときに、初期費用のいらないVultrがとても便利。
https://www.vultr.com/

検証のため何度もサーバデプロイするのだが、同じ設定を繰り返すのは面倒なのでStartupScriptを毎回使っており、その内容をメモする。
スナップショットからデプロイする手もあるけど、なんとなく手垢がついてそうでいやだった。

スクリプトはVultrのVC2で次のOSにて動作確認済み。

  • Ubuntu16.04
  • Ubuntu17.04

使う前に後述の準備で取得した値を定数に入れる。

スクリプト

#!/bin/bash

#ログインユーザ名
username='Foo'

#ログインパスワード(ハッシュ)
password_hash='$6$Q8~'

#SSH用公開認証鍵
public_key='ssh-rsa AAA~'

#ユーザを追加し、ついでにsudoできるようにする
useradd -p ${password_hash} -s /bin/bash -m $username
gpasswd -a ${username} sudo

#SSH用公開認証鍵を追加する
mkdir -p /home/${username}/.ssh
chmod 700 /home/${username}/.ssh
echo "${public_key}" > /home/${username}/.ssh/authorized_keys
chmod 600 /home/${username}/.ssh/authorized_keys
chown -R ${username}:${username} /home/${username}/.ssh

#sshdのパスワード認証を無効化し、公開鍵認証のみできるようにする
sed -i".org" -e '/^#PasswordAuthentication yes$/a PasswordAuthentication no' /etc/ssh/sshd_config

#ついでにSSHでrootログインできないようにする
sed -i".org" -e 's/^PermitRootLogin yes$/PermitRootLogin no/' /etc/ssh/sshd_config

#sshdへ設定反映
systemctl reload sshd

#スワップ領域の追加(以下は1GBの場合)
dd if=/dev/zero of=/swapfile count=1024 bs=1M
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
sed -e '$ a /swapfile        none        swap    sw    0        0' /etc/fstab

#ufwでsshの通信を許可し、その他をブロックする
ufw allow OpenSSH
ufw enable

#ufwのロギングをオフにする
ufw logging off

#日本語を設定する
apt install language-pack-ja-base language-pack-ja
localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"

#日本時間にする
timedatectl set-timezone Asia/Tokyo

#パッケージを最新にする
apt update && DEBIAN_FRONTEND=noninteractive apt -yq upgrade

(準備)ログインパスワード用ハッシュの作成

ハッシュにしておけばスクリプトが見られてもあんまり問題にならないはず。
以下の[Password]と[Salt]の2箇所を変更して実行した結果を使用。

perl -e 'print crypt("Password", "\$6\$Salt");'

(準備)認証鍵の作成

公開鍵(id_rsa.pub)の内容をスクリプトで使用し、秘密鍵(id_rsa)はクライアントに保存しておく。

ssh-keygen -t rsa

コメント