GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden des passwd-Befehls innerhalb eines Shell-Skripts

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:

wechsle
echo "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

Linux
  1. Senden Sie eine E-Mail vom Linux-Terminal oder Skript mit dem Befehl mail

  2. Wie maskiert/schützt der Su-Befehl das Passwort davor, auf dem Bildschirm angezeigt zu werden?

  3. Die Bedeutung von $? In einem Shell-Skript?

  4. passwd-Befehlsbeispiele in Linux

  5. passwd:Befehl nicht gefunden

So verwenden Sie den Passwd-Befehl unter Linux

Einfaches Verständnis von Shell-Befehlen mit dem Skript „Explain Shell“ in Linux

10 passwd-Befehlsbeispiele unter Linux

Wie führe ich einen Befehl in einem Shell-Skript aus?

Wie installiere ich ein Skript, das überall von der Befehlszeile aus ausgeführt werden kann?

Führen Sie ein Shell-Skript über den Befehl docker-compose im Container aus