Приведенный ниже сценарий - это то, что я уже пробовал, но при запуске он по-прежнему запрашивал у меня пароль пользователя и другую информацию.
#!/bin/bash
PASSWORD="somepassword"
USERNAME="default"
if id -u "$USERNAME" >/dev/null 2>&1; then
userdel -r -f $USERNAME
adduser --disabled-password --gecos "" $USERNAME
usermod -a -G sudo $USERNAME
echo $USERNAME:$PASSWORD | chpasswd
else
adduser $USERNAME
adduser --disabled-password --gecos "" $USERNAME
usermod -a -G sudo $USERNAME
echo $USERNAME:$PASSWORD | chpasswd
fi
Оказывается, adduser
отстой, если вы попытаетесь использовать его в автономном скрипте. В итоге я использовал старый добрый useradd
, который полностью исправил мой сценарий ниже.
#!/bin/bash
PASSWORD="somepassword"
USERNAME="default"
if id -u "$USERNAME" >/dev/null 2>&1; then
userdel -r -f $USERNAME
useradd -m -p $PASSWORD -s /bin/bash $USERNAME
usermod -a -G sudo $USERNAME
echo $USERNAME:$PASSWORD | chpasswd
else
useradd -m -p $PASSWORD -s /bin/bash $USERNAME
usermod -a -G sudo $USERNAME
echo $USERNAME:$PASSWORD | chpasswd
fi
Предупреждение : оставлять UN-зашифрованный пароль внутри скрипта - очень плохая идея. Если вы все же решите это сделать, по крайней мере, измените права доступа к файлу на 600 от root. Это защитит его от простых атак.
Затем:
Первая проблема, которую я вижу, заключается в том, что вы дважды вызываете adduser
в части else.
Это вызовет первое выполнение, которое задаст все вопросы.
Второй вызов работает нормально.
Кроме того, существует много общих опций между частями then и else, сценарий можно записать так:
#!/bin/bash
$PassWord="somepassword"
UserName="default"
if id -u "$UserName" >/dev/null 2>&1; then
userdel -r -f "$UserName"
fi
adduser --disabled-password --gecos "" "$UserName"
userdir=/home/"$UserName"
[[ -d $userdir ]] || mkdir "$userdir" # only needed for system users.
# which usually do not have a password.
usermod -a -G sudo "$UserName"
echo "$UserName:$PassWord" | chpasswd