Passwörter aus Variable an Befehl übergeben
Passwörter aus Variable an Befehl übergeben
Ich habe ein Shellscript, das 8 Passwörter abfragt, allerdings ist es immer dasselbe. Deshalb würde ich gerne das Passwort am Anfang des Skriptes mittels read abfragen, in einer Variablen speichern und dann an alle 8 Befehle übergeben. Es geht hierbei um die Befehle ssh, sshfs und encfs. Ist das möglich, und wenn ja, wie geh ich dabei vor?
(Falls jemand nun einen Kommentar schreiben möchte, nur um zu sagen, wie unsicher mein Vorgehen doch ist: Es handelt sich hierbei um einen Server, der lediglich über das lokale Netzwerk erreichbar ist. Die Daten des Servers sind identisch mit den Daten des Clients, somit würde ein Aussphähen des Passworts auf dem Client dem Angreifer keinen Mehrwert bieten.)
(Falls jemand nun einen Kommentar schreiben möchte, nur um zu sagen, wie unsicher mein Vorgehen doch ist: Es handelt sich hierbei um einen Server, der lediglich über das lokale Netzwerk erreichbar ist. Die Daten des Servers sind identisch mit den Daten des Clients, somit würde ein Aussphähen des Passworts auf dem Client dem Angreifer keinen Mehrwert bieten.)
-
- Beiträge: 507
- Registriert: 30.12.2016 23:48:51
Re: Passwörter aus Variable an Befehl übergeben
Es ist durchaus sehr ratsam das so abzuändern, anstatt dasselbe wieder und wieder einzutippen.
Ein Beispiel könnte sein:
Somit wäre das Passwort jeweils in $INPUT und könnte entsprechend weiterverarbeitet werden.
Allerdings ist das nur eine primitive Abfrage, und sollte für mehr Robustheit erweitert werden.
Das könnte folgendermaßen aussehen:
Hier mit Test-Bedingungen zu arbeiten hat den Vorteil, dass man den jeweiligen Programmen nicht irgendetwas via Variable übergibt, was so ggf. nicht erwartet wird und zu Fehlern führen würde.
Ein Beispiel könnte sein:
Code: Alles auswählen
read -e -r -p "Bitte geben Sie ihr Passwort ein: " INPUT
Allerdings ist das nur eine primitive Abfrage, und sollte für mehr Robustheit erweitert werden.
Das könnte folgendermaßen aussehen:
Code: Alles auswählen
while true
do
# Übergibt die Eingabe an die Variable INPUT, und missbilligt durch die Shell interpretierte Zeichen
read -e -r -p "Bitte geben Sie ihr Passwort ein: " INPUT
# Erwartet mindestens eine Eingabe, die nicht leer sein darf
[[ -z "$INPUT ]] || { echo "Leere Eingabe"; continue; }
# Erwartet ein exakt 10 stelliges Passwort, welches aus Zahlen, Groß -und Kleinbuchstaben bestehen muss
[[ "$INPUT" =~ ^[[:alnum:]]{10}$ ]] || { echo "Falsches Passwortformat"; continue; }
# Bei Erfolg wird die Schleife verlassen und der Rest des Shellscriptes wird abgearbeitet
break
done
Re: Passwörter aus Variable an Befehl übergeben
Wie der read-Befehl funktioniert, weiß ich selbst. Ich weiß nur nicht, wie ich die $INPUT-Variable dann an ssh, sshfs oder encfs weitergebe.
Re: Passwörter aus Variable an Befehl übergeben
Du solltest es jedenfalls nicht als Kommandozeilenparameter oder Environmentvariable tun, weil man das bequem per ps(1) angucken kann.katze123 hat geschrieben:Ich weiß nur nicht, wie ich die $INPUT-Variable dann an ssh, sshfs oder encfs weitergebe.
Use ed once in a while!
Re: Passwörter aus Variable an Befehl übergeben
Ich bin der einzige User auf dem Client, sodass es niemand außer mir angucken kann. Ich bitte um konstruktive Antworten, weitere Sicherheitstipps werden von mir dickköpfig ignoriert.Meillo hat geschrieben:Du solltest es jedenfalls nicht als Kommandozeilenparameter oder Environmentvariable tun, weil man das bequem per ps(1) angucken kann.katze123 hat geschrieben:Ich weiß nur nicht, wie ich die $INPUT-Variable dann an ssh, sshfs oder encfs weitergebe.

Re: Passwörter aus Variable an Befehl übergeben
Damit bin ich raus ...katze123 hat geschrieben:Ich bin der einzige User auf dem Client, sodass es niemand außer mir angucken kann. Ich bitte um konstruktive Antworten, weitere Sicherheitstipps werden von mir dickköpfig ignoriert.Meillo hat geschrieben:Du solltest es jedenfalls nicht als Kommandozeilenparameter oder Environmentvariable tun, weil man das bequem per ps(1) angucken kann.katze123 hat geschrieben:Ich weiß nur nicht, wie ich die $INPUT-Variable dann an ssh, sshfs oder encfs weitergebe.

Use ed once in a while!
Re: Passwörter aus Variable an Befehl übergeben
Für den Job bietet sich
expect an.
OT: jammere halt nicht rum, wenn du auf einmal nicht mehr der einzige User auf dem System bist, weil relevante PW ausgeleitet wurden.

OT: jammere halt nicht rum, wenn du auf einmal nicht mehr der einzige User auf dem System bist, weil relevante PW ausgeleitet wurden.
Re: Passwörter aus Variable an Befehl übergeben
Anstatt eines Passwortes würde ich einen SSH-Key verwenden. Ist sicherer und du spartst dir die unnötige Passworteingabe.
-
- Beiträge: 507
- Registriert: 30.12.2016 23:48:51
Re: Passwörter aus Variable an Befehl übergeben
Ich sehe das Problem. Hatte vergessen dass das via ssh nicht mehr so einfach ist, und selbst nutze Ich ohnehin nur noch Public-Keys. Die wirklich einfachste Option wäre dann wohl sshpass, was noch herunterladen müsstest.katze123 hat geschrieben:Wie der read-Befehl funktioniert, weiß ich selbst. Ich weiß nur nicht, wie ich die $INPUT-Variable dann an ssh, sshfs oder encfs weitergebe.
Und dann könnte das so aussehen:
Code: Alles auswählen
sshpass -f <(echo "$INPUT") ssh user@host
Auf der Kommandozeile wird also immer nur das zu sehen sein:
Code: Alles auswählen
sshpass -f /dev/fd/63 ssh user@host