forked from jasonheecs/ubuntu-server-setup
/
setup.sh
133 lines (108 loc) · 3.33 KB
/
setup.sh
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/bash
set -e
# スクリプトのディレクトリを取得
function getCurrentDir() {
local current_dir="${BASH_SOURCE%/*}"
if [[ ! -d "${current_dir}" ]]; then current_dir="$PWD"; fi
echo "${current_dir}"
}
# 外部スクリプトを読込
function includeDependencies() {
# shellcheck source=./setupLibrary.sh
source "${current_dir}/setupLibrary.sh"
# shellcheck source=./MyLibrary.sh
source "${current_dir}/MyLibrary.sh"
}
current_dir=$(getCurrentDir)
includeDependencies
output_file="output.log"
# ユーザに対話的に質問し,設定
function main() {
# 新しい非ルートユーザの作成,または既存のユーザアカウントの更新
read -rp "Do you want to create a new non-root user? (Recommended) [Y/N] " createUser
# Run setup functions
trap cleanup EXIT SIGHUP SIGINT SIGTERM
if [[ $createUser == [nN] ]]; then
username=$(whoami)
updateUserAccount "${username}"
elif [[ $createUser == [yY] ]]; then
read -rp "Enter the username of the new user account: " username
addUserAccount "${username}"
else
echo 'This is not a valid choice!'
exit 1
fi
# ユーザーによるSSHキーの入力
read -rp $'Paste in the public SSH key for the new user:\n' sshKey
echo 'Running setup script...'
logTimestamp "${output_file}"
exec 3>&1 >>"${output_file}" 2>&1
# sudoのパスワードなし設定,SSHキーの追加,SSHの設定変更
disableSudoPassword "${username}"
addSSHKey "${username}" "${sshKey}"
changeSSHConfig
# UFWの設定
setupUfw
# Change SSH port num.
echo -ne "Enter the new SSH port num. (Default 22): " >&3
read -r ssh_port
if [[ "${ssh_port}" =~ ^[0-9]+$ ]] && [ $ssh_port -ne 22 ]; then
changeSSHPort "${ssh_port}"
changeUfw "${ssh_port}"
fi
# Swapの設定
if ! hasSwap; then
setupSwap
fi
# タイムゾーンの設定
setupTimezone
# NTPの設定
echo "Configuring System Time... " >&3
configureNTP
# SSHサービスの再起動
sudo service ssh restart
# Private (Run private/*.sh)
for private_script in `find private -maxdepth 1 | grep '\.sh$'`; do
chmod +x "${private_script}"
$private_script
done
cleanup
echo "Setup Done! Log file is located at ${output_file}" >&3
}
# Swap領域の設定と調整
function setupSwap() {
createSwap
mountSwap
tweakSwapSettings "10" "50"
saveSwapSettings "10" "50"
}
# 既にSwapを使用しているかどうかを確認
function hasSwap() {
[[ "$(sudo swapon -s)" == *"/swapfile"* ]]
}
# スクリプトが変更した設定のクリーンアップ
function cleanup() {
if [[ -f "/etc/sudoers.bak" ]]; then
revertSudoers
fi
}
# ログファイルにタイムスタンプを追加
function logTimestamp() {
local filename=${1}
{
echo "==================="
echo "Log generated on $(date)"
echo "==================="
} >>"${filename}" 2>&1
}
# タイムゾーンの設定
function setupTimezone() {
echo -ne "Enter the timezone for the server (Default is 'Asia/Tokyo'):\n" >&3
read -r timezone
if [ -z "${timezone}" ]; then
timezone="Asia/Tokyo"
fi
setTimezone "${timezone}"
echo "Timezone is set to $(cat /etc/timezone)" >&3
}
main