Die einzige Lösung funktioniert unter Ubuntu 12.04:
echo -e "new_password\nnew_password" | (passwd user)
Aber die zweite Option funktioniert nur, wenn ich von:
wechsleecho "password:name" | chpasswd
An:
echo "user:password" | chpasswd
Siehe Erklärungen im Originalbeitrag:Passwort über ein Skript ändern
Lesen Sie die weisen Worte aus:
- http://mywiki.wooledge.org/BashFAQ/078
Ich zitiere:
Nichts, was Sie in bash tun können, kann möglicherweise funktionieren. passwd(1) liest nicht von der Standardeingabe. Dies ist beabsichtigt. Es ist zu Ihrem Schutz. Passwörter waren nie dazu gedacht, in Programme eingefügt oder von Programmen generiert zu werden. Sie sollten nur mit den Fingern eines wirklichen Menschen mit einem funktionierenden Gehirn eingegeben werden und niemals irgendwo niedergeschrieben werden.
Trotzdem bekommen wir Horden von Benutzern, die fragen, wie sie 35 Jahre Unix-Sicherheit umgehen können.
Anschließend wird erklärt, wie Sie Ihren shadow(5)
einstellen können Passwort richtig und zeigt Ihnen das GNU-Ich-sorge-sich-nur-um-Sicherheit-wenn-es-mich-nicht-zu-viel-nachdenklich-macht -Möglichkeit, passwd(1)
zu missbrauchen .
Schließlich, wenn Sie die dumme GNU passwd(1)-Erweiterung --stdin
verwenden , nicht Übergeben Sie das Passwort, indem Sie es in die Befehlszeile eingeben.
echo $mypassword | passwd --stdin # Eternal Sin.
echo "$mypassword" | passwd --stdin # Eternal Sin, but at least you remembered to quote your PE.
passwd --stdin <<< "$mypassword" # A little less insecure, still pretty insecure, though.
passwd --stdin < "passwordfile" # With a password file that was created with a secure `umask(1)`, a little bit secure.
Letzteres ist das Beste, was Sie mit GNU passwd
erreichen können . Obwohl ich es trotzdem nicht empfehlen würde.
Wenn Sie das Passwort in die Befehlszeile eingeben, kann jeder, der auch nur den geringsten Hinweis auf den Zugriff auf die Box hat, ps
überwachen oder so und stehlen Sie das Passwort. Auch wenn Sie denken, dass Ihre Box sicher ist; es ist etwas, was Sie wirklich tun sollten Gewöhnen Sie sich an, es um jeden Preis zu vermeiden (ja, sogar die Kosten für etwas mehr Mühe, um die Arbeit zu erledigen).
von "man 1 passwd
":
--stdin
This option is used to indicate that passwd should read the new
password from standard input, which can be a pipe.
Also in deinem Fall
adduser "$1"
echo "$2" | passwd "$1" --stdin
[Aktualisieren ] In den Kommentaren wurden einige Probleme angesprochen:
Ihr passwd
Befehl darf kein --stdin
haben Option:Verwenden Sie den chpasswd
Dienstprogramm stattdessen, wie von ashawley vorgeschlagen.
Wenn Sie eine andere Shell als bash verwenden, ist „echo“ möglicherweise kein eingebauter Befehl, und die Shell ruft /bin/echo
auf . Dies ist unsicher, da das Passwort in der Prozesstabelle angezeigt wird und mit Tools wie ps
eingesehen werden kann .
In diesem Fall sollten Sie eine andere Skriptsprache verwenden. Hier ist ein Beispiel in Perl:
#!/usr/bin/perl -w
open my $pipe, '|chpasswd' or die "can't open pipe: $!";
print {$pipe} "$username:$password";
close $pipe
Heutzutage können Sie diesen Befehl verwenden:
echo "user:pass" | chpasswd