Skip to content

Commit f0d0e91

Browse files
authored
Refactor cloud-init/base.sh (#1797)
* Refactor cloud-init/base.sh * Pass shellcheck * Use variable for username * Fix issues with umask and sudo * Simplify until loops * Use literal algo for filename in /etc/sudoers.d/10-algo-user
1 parent 3fe09bd commit f0d0e91

File tree

1 file changed

+31
-15
lines changed

1 file changed

+31
-15
lines changed

files/cloud-init/base.sh

+31-15
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,41 @@
11
#!/bin/bash
2-
set -eux
2+
set -euxo pipefail
33

4-
which sudo || until \
5-
apt-get update -y && \
6-
apt-get install sudo -yf --install-suggests; do
7-
sleep 3
4+
readonly user='algo'
5+
6+
export DEBIAN_FRONTEND='noninteractive'
7+
8+
until which sudo; do
9+
apt-get update -qq
10+
apt-get install -qqf --install-suggests sudo
11+
sleep 3
812
done
913

10-
getent passwd algo || useradd -m -d /home/algo -s /bin/bash -G adm -p '!' algo
14+
getent passwd "${user}" \
15+
|| useradd -m -d "/home/${user}" -s /bin/bash -G adm -p '!' "${user}"
16+
17+
(
18+
umask 0337 \
19+
&& printf '%s\n' "${user} ALL=(ALL) NOPASSWD:ALL" \
20+
>"/etc/sudoers.d/10-algo-user"
21+
)
22+
23+
printf "{{ lookup('template', 'files/cloud-init/sshd_config') }}\n" \
24+
>/etc/ssh/sshd_config
1125

12-
(umask 337 && echo "algo ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/10-algo-user)
26+
# This should be idempotent; correct permsission on .ssh dir if exists
27+
install -o "${user}" -g "${user}" -m 0700 -d "/home/${user}/.ssh"
1328

14-
cat <<EOF >/etc/ssh/sshd_config
15-
{{ lookup('template', 'files/cloud-init/sshd_config') }}
16-
EOF
29+
# umask does not reliably work with sudo
30+
install -o "${user}" -g "${user}" -m 0600 \
31+
/dev/null "/home/${user}/.ssh/authorized_keys"
1732

18-
test -d /home/algo/.ssh || (umask 077 && sudo -u algo mkdir -p /home/algo/.ssh/)
19-
echo "{{ lookup('file', '{{ SSH_keys.public }}') }}" | (umask 177 && sudo -u algo tee /home/algo/.ssh/authorized_keys)
33+
printf "{{ lookup('file', '{{ SSH_keys.public }}') }}\n" \
34+
>"/home/${user}/.ssh/authorized_keys"
2035

21-
dpkg -l sshguard && until apt-get remove -y --purge sshguard; do
22-
sleep 3
23-
done || true
36+
until ! dpkg -l sshguard; do
37+
apt-get remove -qq --purge sshguard
38+
sleep 3
39+
done || :
2440

2541
systemctl restart sshd.service

0 commit comments

Comments
 (0)