Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
joe2017
- Beiträge: 1136
- Registriert: 07.08.2017 14:29:51
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.
-
MartinV
- Beiträge: 788
- Registriert: 31.07.2015 19:38:52
- Wohnort: Hyperion
-
Kontaktdaten:
Beitrag
von MartinV » 15.07.2019 10:31:14
passwd ist immer interaktiv.
Nimm stattdessen chpasswd. Beispiel.
Geht aber nur als root.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.
-
joe2017
- Beiträge: 1136
- Registriert: 07.08.2017 14:29:51
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?
-
MartinV
- Beiträge: 788
- Registriert: 31.07.2015 19:38:52
- Wohnort: Hyperion
-
Kontaktdaten:
Beitrag
von MartinV » 15.07.2019 10:56:53
Versuch es mal mit
expect. 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
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?
-
joe2017
- Beiträge: 1136
- Registriert: 07.08.2017 14:29:51
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!?
Warum das mit Veriablen geht und mit Text nicht ist mir nicht ganz klar?
-
joe2017
- Beiträge: 1136
- Registriert: 07.08.2017 14:29:51
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.
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?
-
MartinV
- Beiträge: 788
- Registriert: 31.07.2015 19:38:52
- Wohnort: Hyperion
-
Kontaktdaten:
Beitrag
von MartinV » 15.07.2019 11:25:01
Für "read" weiß ich nichts, aber
dialog 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.
-
joe2017
- Beiträge: 1136
- Registriert: 07.08.2017 14:29:51
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.
-
MartinV
- Beiträge: 788
- Registriert: 31.07.2015 19:38:52
- Wohnort: Hyperion
-
Kontaktdaten:
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.
-
joe2017
- Beiträge: 1136
- Registriert: 07.08.2017 14:29:51
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: 12075
- Registriert: 03.06.2008 09:33:02
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"
-
joe2017
- Beiträge: 1136
- Registriert: 07.08.2017 14:29:51
Beitrag
von joe2017 » 15.07.2019 12:31:16
joe2017 hat geschrieben: 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: 12075
- Registriert: 03.06.2008 09:33:02
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:
-
joe2017
- Beiträge: 1136
- Registriert: 07.08.2017 14:29:51
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: 12075
- Registriert: 03.06.2008 09:33:02
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?
-
joe2017
- Beiträge: 1136
- Registriert: 07.08.2017 14:29:51
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.