[gelöst] passwd via Script

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

[gelöst] passwd via Script

Beitrag von joe2017 » 15.07.2019 10:04:03

Hallo zusammen,

ich habe nur ein kleines Problem mit dem Ändern eines Kerberos Passwords.
Ich möchte das Ganze mit einem Script erledigen. Hierfür habe ich jetzt schon mehrer Syntaxen getestet.

Code: Alles auswählen

echo -e "your_current_pass\nyour_new_password\nyour_new_password" | passwd
Jedoch erhalte ich hier die Meldung Password falsch

Code: Alles auswählen

echo -e 'your_current_pass'\n'your_new_password'\n'your_new_password' | passwd
Das funktioniert auch nicht.

Code: Alles auswählen

echo -e "'your_current_pass'\n'your_new_password'\n'your_new_password'" | passwd
Das funktioniert ebenfalls nicht.

Was mache ich falsch?
Zuletzt geändert von joe2017 am 15.07.2019 13:11:23, insgesamt 1-mal geändert.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: passwd via Script

Beitrag von MartinV » 15.07.2019 10:31:14

passwd ist immer interaktiv.
Nimm stattdessen chpasswd. Beispiel.

Code: Alles auswählen

echo username:passwort | chpasswd
Geht aber nur als root.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: passwd via Script

Beitrag von joe2017 » 15.07.2019 10:52:17

Das ist leider das Problem. Ich kann das nicht mit root Rechten ausführen, da es sich hierbei um ein Script handelt welches unter einem User ausgeführt wird.
Das ganz Problem bei der oben genannten Syntax ist, dass passwd nicht weiß wo mein Password beginnt und wo es aufhört. Das muss sich doch lösen lassen?

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: passwd via Script

Beitrag von MartinV » 15.07.2019 10:56:53

Versuch es mal mit Debianexpect. Das dient dazu, interaktive Kommandos von einem Skript aus zu bedienen. Etwas hampelig, aber geht.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

TomL

Re: passwd via Script

Beitrag von TomL » 15.07.2019 10:57:11

Nur mal so interessehalber und aus Neugier... du sagst "kerberos password", verwendest aber passwd um das Linux-Password zu ändern? Hat Kerberos nicht ein eigenes Password-Tool oder verwendet man in beiden Fällen passwd?

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: passwd via Script

Beitrag von joe2017 » 15.07.2019 11:04:18

Wenn du mit einem LDAP/Kerberos User angemeldet bist, wird dein Passwort auch mit passwd geändert.

Ich hab das ganze mal mit Variablen getestet und das hat funktioniert. Seltsam!?

Code: Alles auswählen

echo -e "$var1\n$var2\n$var3" | passwd
Warum das mit Veriablen geht und mit Text nicht ist mir nicht ganz klar?

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: passwd via Script

Beitrag von joe2017 » 15.07.2019 11:11:15

Jetzt möchte ich natürlich meine Passwörter in Variablen einlesen und finde die Eingabe etwas unschön. Ich lese diese wie folgt ein.

Code: Alles auswählen

read -s -p "Enter Password: " mypassword
Mit dem Parameter "-s" wird der Text unterdrückt was evtl einen Anwender verwirrt. Gibt es einen Parameter welche die Eingabe mit "*" anzeigt, damit ein Anwender auch sieht das er etwas eingibt?

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: passwd via Script

Beitrag von MartinV » 15.07.2019 11:25:01

Für "read" weiß ich nichts, aber Debiandialog bietet etwas an:

Code: Alles auswählen

dialog --insecure --passwordbox "Passwort eingeben" 8 50 2>passwort.txt
cat passwort.txt
Option "--insecure" bewirkt die Anzeige der *.
Das Ergebnis wird auf stderr geschrieben, deshalb 2>passwort.txt.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: passwd via Script

Beitrag von joe2017 » 15.07.2019 11:27:24

Ich möchte dialog nicht installieren. Gibt es eine andere Option welche bereits onboard ist? Ich möchte die Eingabe auch mit einem Script im Terminal machen.

Benutzeravatar
MartinV
Beiträge: 788
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: passwd via Script

Beitrag von MartinV » 15.07.2019 11:42:52

Eine andere Fertiglösung im Terminal kenne ich nicht.
Du kannst etwas basteln, indem Du in einer Schleife einzelne Zeichen unsichtbar einliest und stattdessen ein * für jedes Zeichen anzeigst.

Code: Alles auswählen

passwort=
zeichen=
while :; do
  read -n1 -s zeichen
  [ -z "$zeichen" ] && break
  echo -n "*"
  passwort="${passwort}${zeichen}"
done
echo ""
echo "Passwort: $passwort"
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: passwd via Script

Beitrag von joe2017 » 15.07.2019 11:56:31

Dein Script hat bei mir nicht wirklich funktioniert. Aber das schau ich mir zu einem späteren Zeitpunkt noch mal an.

kann man das passwd in eine while do Schleife packen und solange ausführen bis das Passwort geändert wurde?
Wenn ich mein passwd im terminal ausführe erhalte ich am Ende die Rückmeldung das mein Passwort geändert oder nicht geändert wurde. Kann man diese Returnwerte abfragen?

Ich sehe, dass es folgende EXIT VALUES gibt

Code: Alles auswählen

The passwd command exits with the following values:
0 = success
1 = permission denied
2 = invalid combination of options
3 = unexpected failure, nothing done
4 = unexpected failure, passwd file missing
5 = passwd file busy, try again
6 = invalid argument to option
Wie kann man diese ansprechen?

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: passwd via Script

Beitrag von uname » 15.07.2019 12:21:24

Folgendes Script habe ich hier gefunden.

Code: Alles auswählen

unset password;
while IFS= read -r -s -n1 pass; do
  if [[ -z $pass ]]; then
     echo
     break
  else
     echo -n '*'
     password+=$pass
  fi
done
Auf der selben Seite auch ganz interessant:

Code: Alles auswählen

echo -e "Enter your password: \x1B[8m"
echo -e "\x1B[0m"

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: passwd via Script

Beitrag von joe2017 » 15.07.2019 12:31:16

joe2017 hat geschrieben: ↑ zum Beitrag ↑
15.07.2019 11:56:31
kann man das passwd in eine while do Schleife packen und solange ausführen bis das Passwort geändert wurde?
Wie kann man diese ansprechen?
Das habe ich wie folgt realisiert:

Code: Alles auswählen

var="1"
while [[ ! $var =~ "2" ]]
do
  echo
  read -sp "old Password" Password1 && echo
  read -sp "new Password" Password2 && echo
  read -sp "new Password" Password3 && echo && echo
  clear && echo -e "$password1\n$Password2\n$Password3" | passwd

  if [[ $? = "0" ]]; then
    var="2"
  fi
done

Zuletzt geändert von joe2017 am 15.07.2019 12:49:06, insgesamt 4-mal geändert.

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: passwd via Script

Beitrag von uname » 15.07.2019 12:35:14

Funktioniert das wie gewünscht?
Ich denke "&&" ist nicht das, was du wirklich in dem Zusammenhang willst. Funktioniert aber wahrscheinlich trotzdem.
https://wiki.ubuntuusers.de/Shell/Operatoren/ hat geschrieben:Mit Hilfe von zwei Kaufmanns-Und && wird eine kurzschließende UND-Verknüpfung zwischen Befehlen erstellt. Dies bedeutet, dass der zweite Befehl nur ausgeführt wird, wenn der erste Befehl erfolgreich (fehlerfrei) ausgeführt wurde. Eine "klassische" Anwendung ist:
Evtl. besser:

Code: Alles auswählen

read -sp "old Password" Password1 
echo

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: passwd via Script

Beitrag von joe2017 » 15.07.2019 12:37:38

Das && echo ist nur dafür da, damit nach der ersten Abfrage ein Zeilenumbruch stattfindet.

Jedoch hat mein Script doch noch nicht gaz funktioniert. Ich passe es gleich rückwirkend an.

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: [gelöst] passwd via Script

Beitrag von uname » 15.07.2019 13:13:02

Den Sinn von "&& echo" hatte ich schon verstanden. Nur willst du doch immer "echo" ausführen, oder?

Benutzeravatar
joe2017
Beiträge: 1136
Registriert: 07.08.2017 14:29:51

Re: [gelöst] passwd via Script

Beitrag von joe2017 » 16.07.2019 11:06:58

Wie gesagt, dass echo ist lediglich für den Zeilenumbruch und kann natürlich auch ohne && in die nächste Zeile geschrieben werden.
Das war nur der einfachste Weg.

Antworten