Amazon Linux2 初期化用シェルスクリプト
しばしばテスト用の Amazon Linux2 を構築するのですが、自分なりの初期設定をスクリプト化してみました。「初期設定を手間なくすませる」方法は、他に以下が考えられると思います。
- Ansible で初期設定用の Playbook を作成する
- 初期設定を済ませた AMI を作成しておく
- cloud-init で初期設定する
Ansible は手軽だし、エージェントも不要なので「良い手段」のひとつだと思います。 大量にテスト用 Linux を用意するのであれば AMI 化するのもひとつの方法だと思いますが、そこまで頻度が高いわけでは無いのであれば、毎回 AWS が提供する最新ベースイメージを Ansible やスクリプト等で設定しても良いと思います。 cloud-init も手軽な方法のひとつですが、「cloud-init が使えない環境には応用し辛い」という点はデメリットだと思います。
スクリプトの内容
スクリプトにより、以下が実行されます。
- ホスト名の設定
- タイムゾーンを日本 (Asia/Tokyo) に設定
- プロンプトに色を付ける
- wheel グループに所属していれば、パスワード無しで sudo 実行可能
- rm / cp / mv 実行時に対話的な Yes/No 確認をしない
- 鍵交換方式で SSH ログイン可能なユーザを追加する
- パッケージを最新にアップデートする
- 再起動する
実行方法
以下のように実行します。 公開鍵はスペースが含まれているので、ダブルクォートで括っておきます。
| curl -L https://raw.githubusercontent.com/sig9org/init-linux/master/init-amazon-linux2.sh | bash -s -- -h "HOSTNAME" -u "USERNAME" -p "PUBLIC-KEY"
|
スクリプト実行後
スクリプトを実行すると OS が再起動されますので、新規作成したユーザでログインし直し、パスワード無しで sudo su -
出来ることを確認します。 問題が無ければ (あれば) 古いバージョンのカーネルを削除し、Amazon Linux2 デフォルトで存在している ec2-user
を削除します。
| package-cleanup --oldkernels --count=1 -y
userdel -r ec2-user
|
参考
実際のスクリプト
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 | #!/bin/bash
_usage() { #(*1)
echo "usage:"
echo "${0} -h HOSTNAME -u USERNAME -p PUBLIC-KEY"
exit 1
}
while getopts h:u:p: OPT
do
case $OPT in
"h" ) ENABLE_h="TRUE" ; VALUE_h=${OPTARG} ;;
"u" ) ENABLE_u="TRUE" ; VALUE_u=${OPTARG} ;;
"p" ) ENABLE_p="TRUE" ; VALUE_p=${OPTARG} ;;
:|\?) _usage;;
esac
done
[ "${ENABLE_h}" != "TRUE" ] && _usage
[ "${ENABLE_u}" != "TRUE" ] && _usage
[ "${ENABLE_p}" != "TRUE" ] && _usage
hostnamectl set-hostname ${VALUE_h}
timedatectl set-timezone Asia/Tokyo
echo "export PS1='\[\033[01;36m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> /etc/profile
echo "export PS1='\[\033[01;31m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\\$ '" >> /root/.bashrc
sed -i -e "s/^%wheel\tALL=(ALL)\tALL/# %wheel\tALL=(ALL)\tALL/g" /etc/sudoers
sed -i -e "s/^# %wheel\tALL=(ALL)\tNOPASSWD: ALL/%wheel\tALL=(ALL)\tNOPASSWD: ALL/g" /etc/sudoers
sed -i -e "s/#PermitRootLogin yes/PermitRootLogin no/g" /etc/ssh/sshd_config
sed -i -e "s/alias rm='rm -i'/#alias rm='rm -i'/g" /root/.bashrc
sed -i -e "s/alias cp='cp -i'/#alias cp='cp -i'/g" /root/.bashrc
sed -i -e "s/alias mv='mv -i'/#alias mv='mv -i'/g" /root/.bashrc
useradd ${VALUE_u}
usermod -aG wheel ${VALUE_u}
mkdir /home/${VALUE_u}/.ssh/
chmod 700 /home/${VALUE_u}/.ssh/
cat << EOF > /home/${VALUE_u}/.ssh/authorized_keys
${VALUE_p}
EOF
chmod 600 /home/${VALUE_u}/.ssh/authorized_keys
chown -R ${VALUE_u}:${VALUE_u} /home/${VALUE_u}/.ssh/
yum -y update
reboot
|