Ich habe einen bestimmten Anwendungsfall, in dem ich das Kennwort eines Benutzers wirklich mit einem einzigen Befehl ohne Interaktivität ändern möchte. Dies geschieht auf sichere Weise (über SSH und auf einem System, auf dem nur ein Benutzer angemeldet sein kann). Es ist also in Ordnung, das neue Kennwort (und gegebenenfalls sogar das alte Kennwort) in der Befehlszeile anzugeben. FWIW, es ist ein Ubuntu-System.
Ich möchte nur vermeiden, diesem System für nur diese eine Aufgabe etwas Erwartungsvolles hinzufügen zu müssen.
ubuntu
command-line-interface
freebsd
password
Paul Hoffman
quelle
quelle
echo "newpassword" | pw usermod theusername -h 0
Antworten:
Sie könnten chpasswd verwenden .
quelle
Sie können
usermod
mit der-p
Option einen Passwort-Hash angeben (nicht das eigentliche Passwort). Sie können den Passwort-Hash mit etwas wiemkpasswd -m sha-256
oder generierenmkpasswd -m md5
quelle
usermod
: '(- Ich werde die Tags auf der Frage beheben.Sicher.
sed
Skript , das Ihr System aktualisiert Kennwortdatei (/etc/shadow
,/etc/master.passwd
, was auch immer es passiert zu sein).quelle
Das
passwd
Dienstprogramm verfügt über die Option --stdin, die Folgendes angibt:Syntax:
Auch wenn Sie erwähnt haben, dass es Ihnen egal ist, können Sie das Kennwort in eine Textdatei einfügen und dann
cat pass.txt
anstelle des Befehls echo den Befehl ausführen, damit er nicht im Bash-Verlauf angezeigt wird.quelle
echo VerySecret | passwd --stdin username
--stdin
Option fürpasswd
.--stdin
entweder - vor allem , weil es eine große Riesen Sicherheitslücke wartet passieren :-)echo "newpass" | passwd --stdin user1
Zeile mit einem Leerzeichen; auf diese Weise wird es überhaupt nicht in die Geschichte eingehen.Wenn die
--stdin
Option nicht funktioniert, können wir grundsätzlich zwei Optionen verwenden:chpaswd
in Ihrem Skript aufgerufen wird .echo "current_password\nnew_password\nnew_password" | passwd user_name
quelle