Ich versuche, den Inhalt der Variablen $ PASSWORD mit expect in passwd zu übergeben. Dies scheint zu funktionieren und fügt die Benutzer hinzu, aber sobald Sie versuchen, sich mit einem der Benutzer über ssh einzuloggen, funktioniert es nicht. Wenn ich das Passwort manuell einstelle, ist es in Ordnung.expect übergibt keine Eingabe an passwd im Bash-Skript
Hatte jemand dieses Problem vor?
USERS=(user1 user2 user3)
generatePassword()
{
pwgen 16 -N 1
}
# Check if user is root
if [ $(whoami) != 'root' ]; then
echo "Must be root to run $0"
exit 1;
fi
# Check if pwgen is installed:
if [[ $(dpkg -s pwgen > /dev/null 2>&1; echo ${PIPESTATUS}) != '0' ]]; then
echo -e "pwgen is not installed, this script will not work without it\n\n'apt-get install pwgen'\n"
exit 1;
else
echo -e "Starting Script...\n\n"
fi
# Iterate through users and add them with a password
for i in ${USERS[@]}; do
PASSWORD=$(generatePassword)
echo "$i $PASSWORD" >> passwords
useradd -m "${i}"
echo -e "Adding $i with a password of '$PASSWORD'\n"
expect -c "
spawn passwd ${i}
expect \"Enter new UNIX password:\"
send -- \"$PASSWORD\r\"
send -- \"\r\"
expect \"Retype new UNIX password:\"
send -- \"$PASSWORD\r\"
send -- \"\r\"
"
echo -e "\nADDED $i with a password of '$PASSWORD'\n"
done
EWWW. Sie führen String-Ersetzungen für Inhalte durch, von denen Sie erwarten, dass sie als Code analysiert werden? Das ist ein merkwürdiger Code-Geruch - wenn Benutzer jemals ihre eigenen Passwörter setzen könnten, könnte dies als eine willkürliche Kommando-Injection-Schwachstelle verwendet werden. –
BTW, siehe http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html für POSIX-Konventionen um Umgebungsvariablen Namen (und damit Namen von Shell-Variablen, die einen Namespace teilen) - Großbuchstaben-Namen sind verwendet von Variablen mit Bedeutung für die Shell oder das Betriebssystem, und Namen mit mindestens einem Kleinbuchstaben sind für die Anwendung reserviert; Betrachten Sie daher "password" anstelle von "PASSWORD", um zu vermeiden, dass versehentlich eine Variable mit Bedeutung für das Betriebssystem überschrieben wird. –
@CharlesDuffy - Ich weiß, das ist das Ergebnis einer Stunde des Fummelns in Ignoranz! Ich versuche, besser zu werden – Detnon