Add sudo no password option

pull/8/head
Bohan Yang 5 years ago committed by GitHub
parent e71ef892bc
commit 389e29e8a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 31
      debi.sh

@ -1,9 +1,9 @@
#!/bin/bash #!/bin/bash
set -eu set -euo pipefail
err() { err() {
printf 'Error: %s.\n' "$1" 1>&2 echo "Error: $1." 1>&2
exit 1 exit 1
} }
@ -18,12 +18,12 @@ run_later() {
} }
backup() { backup() {
run_later "[ ! -e \"$1.backup\" ] && cp \"$1\" \"$1.backup\"" run_later "if [ ! -e \"$1.backup\" ]; then cp \"$1\" \"$1.backup\"; fi"
} }
prompt_password() { prompt_password() {
if [ -z "$password" ]; then if [ -z "$password" ]; then
read -rs -p 'Password: ' password read -rs -p 'Password: ' password;
fi fi
} }
@ -43,6 +43,7 @@ security_repository=http://security.debian.org/debian-security
skip_account_setup=false skip_account_setup=false
username=debian username=debian
password= password=
sudo_no_password=false
cleartext_password=false cleartext_password=false
timezone=UTC timezone=UTC
ntp=0.debian.pool.ntp.org ntp=0.debian.pool.ntp.org
@ -148,6 +149,9 @@ while [ $# -gt 0 ]; do
password=$2 password=$2
shift shift
;; ;;
--sudo-no-password)
sudo_no_password=true
;;
--timezone) --timezone)
timezone=$2 timezone=$2
shift shift
@ -242,10 +246,7 @@ installer_directory="/boot/$installer"
save_preseed='cat' save_preseed='cat'
if [ "$dry_run" != true ]; then if [ "$dry_run" != true ]; then
user="$(id -un 2>/dev/null || true)" [ "$(id -u)" -ne 0 ] && err 'root privilege is required'
[ "$user" != root ] && err 'root privilege is required'
rm -rf "$installer_directory" rm -rf "$installer_directory"
mkdir -p "$installer_directory/initrd" mkdir -p "$installer_directory/initrd"
cd "$installer_directory" cd "$installer_directory"
@ -294,7 +295,7 @@ EOF
if [ -n "$authorized_keys_url" ]; then if [ -n "$authorized_keys_url" ]; then
backup /etc/ssh/sshd_config backup /etc/ssh/sshd_config
run_later 'sed -Ei "s/^#?PasswordAuthentication.*/PasswordAuthentication no/" /etc/ssh/sshd_config' run_later 'sed -Ei "s/^#?PasswordAuthentication .+/PasswordAuthentication no/" /etc/ssh/sshd_config'
$save_preseed << EOF $save_preseed << EOF
d-i network-console/password-disabled boolean true d-i network-console/password-disabled boolean true
d-i network-console/authorized_keys_url string $authorized_keys_url d-i network-console/authorized_keys_url string $authorized_keys_url
@ -353,7 +354,7 @@ EOF
if [ "$username" = root ]; then if [ "$username" = root ]; then
if [ -z "$authorized_keys_url" ]; then if [ -z "$authorized_keys_url" ]; then
backup /etc/ssh/sshd_config backup /etc/ssh/sshd_config
run_later 'sed -Ei "s/^#?PermitRootLogin.*/PermitRootLogin yes/" /etc/ssh/sshd_config' run_later 'sed -Ei "s/^#?PermitRootLogin .+/PermitRootLogin yes/" /etc/ssh/sshd_config'
else else
run_later "mkdir -m 0700 -p ~root/.ssh && busybox wget -O - \"$authorized_keys_url\" >> ~root/.ssh/authorized_keys" run_later "mkdir -m 0700 -p ~root/.ssh && busybox wget -O - \"$authorized_keys_url\" >> ~root/.ssh/authorized_keys"
fi fi
@ -373,12 +374,16 @@ EOF
fi fi
else else
backup /etc/ssh/sshd_config backup /etc/ssh/sshd_config
run_later 'sed -Ei "s/^#?PermitRootLogin.*/PermitRootLogin no/" /etc/ssh/sshd_config' run_later 'sed -Ei "s/^#?PermitRootLogin .+/PermitRootLogin no/" /etc/ssh/sshd_config'
if [ -n "$authorized_keys_url" ]; then if [ -n "$authorized_keys_url" ]; then
run_later "sudo -u $username mkdir -m 0700 -p ~$username/.ssh && busybox wget -O - \"$authorized_keys_url\" | sudo -u $username tee -a ~$username/.ssh/authorized_keys" run_later "sudo -u $username mkdir -m 0700 -p ~$username/.ssh && busybox wget -O - \"$authorized_keys_url\" | sudo -u $username tee -a ~$username/.ssh/authorized_keys"
fi fi
if [ "$sudo_no_password" = true ]; then
run_later "echo \"$username ALL=(ALL:ALL) NOPASSWD:ALL\" > \"/etc/sudoers.d/90-user-$username\""
fi
$save_preseed << EOF $save_preseed << EOF
d-i passwd/root-login boolean false d-i passwd/root-login boolean false
d-i passwd/make-user boolean true d-i passwd/make-user boolean true
@ -549,7 +554,7 @@ if [ "$dry_run" != true ]; then
busybox wget "$base_url/linux" "$base_url/initrd.gz" busybox wget "$base_url/linux" "$base_url/initrd.gz"
[ "$firmware" = true ] && busybox wget "$firmware_url" [ "$firmware" = true ] && busybox wget "$firmware_url"
else else
err '"wget" or "curl" or "busybox wget" is required to download files' err 'Could not find "wget" or "curl" or "busybox wget" command to download files'
fi fi
cd initrd cd initrd
@ -567,7 +572,7 @@ if [ "$dry_run" != true ]; then
grub_cfg=/boot/grub2/grub.cfg grub_cfg=/boot/grub2/grub.cfg
grub2-mkconfig -o "$grub_cfg" grub2-mkconfig -o "$grub_cfg"
else else
err 'update-grub/grub2-mkconfig command not found' err 'Could not find "update-grub" or "grub2-mkconfig" command'
fi fi
save_grub_cfg="tee -a $grub_cfg" save_grub_cfg="tee -a $grub_cfg"

Loading…
Cancel
Save