Ochse schrieb:
Code:
#!/bin/bash
read -p "Passworteingabe :" -s VarName
sshpass -p $VarName scp -r user1@server1:/pfad/ user2@server2:/pfad/
Sollte doch in Ordnung sein, oder?
Ok, mein letzter Post war gemein und ich entschuldige mich. Aber nein, so ist das absolut nicht in Ordnung.
Wie ich bereits sagte, kann man mit ps die Kommandozeile aller laufender Prozesse aller User sehen. Und die Variable $VarName wird von der Shell in das Passwort expandiert. Landet also, wie du immer sagst "im Klartext" in der Prozessliste, die alle User sehen können. Deshalb darfst du das auf keinen Fall so tun.
Wenn dein Passwort zum Beispiel PommesFrites lautet, expandiert die Shell deinen Befehl zu:
sshpass -p PommesFrites scp -r user1@server1:/pfad/ user2@server2:/pfad/
Wenn du die Prozessliste jetzt nach der wörtlichen Zeichenkette "$VarName" durchgrepst, bekommst du kein Ergebnis, weil statt dieser Zeichenkette von der Shell dein Passwort eingesetzt worden ist.
Würdest du stattdessen nach "scp" greppen, bekommst du genau die Zeile die ich oben schrob. MIT DEINEM PASSWORT DARIN. EGAL ALS WELCHER USER DU PS AUFRUFST. DAS IST NICHT GUT!
Die richtige Art, einem neu zu spawnenden Prozess eine Variable zu übergeben lautet, wie ich schon längst gepetzt habe, so:
z.B. so:
Den Wert der Variablen LC_ALL kann so nur der Benutzer sehen, der den Befehl ls in diesem Kontext ausgeführt hat. Deshalb ist das die einzig richtige Art und Weise, einem Prozess ein Passwort als Variable zu übergeben.
Können wir uns jetzt lieb haben und knuddeln?