Mehrmalige Passworteingabe in Bash-Script vermeiden

  • Ersteller Ersteller Ochse
  • Erstellt am Erstellt am
Bin mir nicht sicher was du mir sagen willst aber versuche mal statt export | grep einfach ps -auxwe | grep und eine richtige Linux- Dist. vielleicht liegen die Missverständnisse darin begründet. Mit dem besagten ps-Befehl sehe ich 'PETER' und dessen Inhalt :evillol: :

ps -auxwe | grep PETER

Aber danke für die Mühe mit dem Video.
 
Zuletzt bearbeitet:
Also könnte ich bei meiner alten Version bleiben oder siehst du einen besseren Weg? Falls du nicht mehr antworten möchtest weil ich dich zu sehr genervt habe dann :n8:

PS. Ach ja bin eigentlich Debian-Mann ;)
 
Ich gebe meine Antwort diesmal nicht als Video, verzeihe mir die Nachlässigkeit. All das Nachbearbeiten undso :(

ochsenboxen.png
 
Hey langsam fang ich an dich zu verstehen :D.

Ich seh das es verwendet aber nicht mehr den Inhalt der Variable im Klartext. Das ist doch eigentlich fast aktzeptabel.

Edit:
Ich nehms zurück ich bekomm gar nicht angezeigt wenn ich grep mit sich selbst ausschließe (grep -v grep).

Edit2:
Ich nehms nochmal zurück. Ich bekomme genauso im Klartext :heul:
 
Zuletzt bearbeitet:
Ja, du bekommst gar nichts angezeigt, wie ich auch. Denn bei allen anderen Benutzern liefert ps kein passendes Ergebnis, außer dem Prozess grep selbst.
Der Benutzer, der das Skript ausgeführt hat, sieht die Variablen, aber das sind ja auch seine eigenen. Würde dem Sinn der Option widersprechen, sie ihm vorzuenthalten.

€:
Ochse schrieb:
Edit2:
Ich nehms nochmal zurück. Ich bekomme genauso im Klartext :heul:

Ich kapituliere vor dir.
 
Zuletzt bearbeitet:
Du kapitulierst nicht vor mir, du kapitulierst vor bash!

root sieht die Variable auch ... aber die anderen nicht.
 
Zuletzt bearbeitet:
Bullshite! Dir mangelt Verständnis für das Problem.

ochsenumboxen.png


Nur der Benutzer, der das Skript ausführt, sieht dessen Variablen. K? K!

Ochse schrieb:
root sieht die Variable auch ... aber die anderen nicht.
Der Administrator darf nicht sehen, was du machst? Dann kann ich dir eine breite Palette Rootkits ans Herz legen!

Junge, Junge... m(
 
Zuletzt bearbeitet:
Sorry wusste nicht das dich meine scherzhafte Bemerkung so in Rage bringt. Wie gesagt der root user sieht das natürlich auch, ist aber nicht kritisch. Hab auch nirgendwo geschrieben, dass er es nicht sehen darf.
Und ich glaube ich verstehe das Problem.

Edit:
So, also mit dem Code aus Post #11 findet der Befehl
ps auxwe | grep VarName
nichts mehr im Klartext, egal unter welchem Benutzer (auch nicht unter dem Benutzer, der das Script ausführt).

Bin da irgendwie mit deinem und meinem Script durcheinander gekommen, deshalb der verwirrende Post #25 :D
 
Zuletzt bearbeitet:
Ochse schrieb:
So, also mit dem Code aus Post #11 findet der Befehl

ps auxwe | grep VarName

nichts mehr im Klartext, egal unter welchem Benutzer (auch nicht unter dem Benutzer, der das Script ausführt).
Nicht dein Ernst jetzt, oder?

triple_facepalm_by_spottedheart98464-d3kuyp3.png


€: Für Leute, die lachen, aber das Post nicht suchen wollen: Das Skript, auf das er sich bezieht, ging so:
Code:
#!/bin/bash
read -p "Passworteingabe :" -s VarName
sshpass -p $VarName scp -r user1@server1:/pfad/ user2@server2:/pfad/
 
Nicht dein Ernst jetzt, oder?

ps findet also etwas?
Erklär es mir doch bitte, was ist an dieser Aussage falsch?
Hast du noch Sinnvolles beizutragen oder wars das schon?
Gut, hatte ich auch nicht anders erwartet.
 
Zuletzt bearbeitet:
Hallo Ochse,

hast du es nun mal ohne exportieren der Variable getestet?

Mit export sehe ich es auch in der Prozessliste. Ohne export funktioniert es sauber.
 
Hallo xone92,

ja ohne export scheint alles okay zu sein. Das sieht dann bei mir so aus:

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?
 
So ähnlich sich es in meinem Testscript auch aus. Es ist ja eigentlich ein shell-Variablen-Problem und hat erstmal nichts mit sshpass und Co. zu tun.

Es ist halt ein Unterschied ob und warum man eine Variable mit export dauerhaft verfügbar macht. Innerhalb von Scripten braucht man es eigentlich nie.
 
Gerne doch :) heute Nacht hatte ich echt überlegt ob ich hier noch was antworte. Da ergab ja ein Wort das andere. Aber nun habe sich die Wogen scheinbar etwas geglättet. Lag vermutlich auch an der späten Stunde.
 
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:

Code:
VARIABLE=Wert <Befehl>

z.B. so:

Code:
LC_ALL=C ls

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?
 
Ok vergessen wir gestern und fangen einen neuen Konflikt an ;)

Den Wert der Variablen LC_ALL kann so nur der Benutzer sehen, der den Befehl ls in diesem Kontext ausgeführt hat.

Ich stimme dir ja zu, teilweise.
Aber es ist doch so, dass theoretisch jedes Programm das unter diesem Benutzer läuft das Passwort im Klartext mit einem ps auslesen kann, wie wir gestern feststellten, richtig?

So hab jetzt folgenden, bereits bekannten Code:

#!/bin/bash
read -p "Passworteingabe :" -s VarName
sshpass -p $VarName scp -r user1@server1:/pfad/ user2@server2:/pfad/

und wenn ich nu eingeben
ps auxwe | grep scp
oder
ps auxwe | grep scriptname
oder
ps auxwe | grep VarName
dann seh ich eben nicht mein Passwort. Sag mir doch bitte einfach das ps Kommando was mir mit obigen Code mein Passwort zeigt, damit ich dir glauben kann :)

PS. Hab grad festgestellt, dass mein Passwort einfach durch zzzzzzzzzz ersetzt/getarnt wird. Ich vermute, dass ist bei dir nicht der Fall. Wahrscheinlich hat meine Methode trotzdem Nachteile, muss nochmal ein wenig recherchieren.
 
Zuletzt bearbeitet:
Bilder sagen nicht immer mehr als 1000 Worte habe ich gerade gelernt.
Ja, wenn ich 2 Scripte benutze dann sehe ich natürlich dass Passwort, wie wir bereits gestern bemerkt haben.

Du hast kein sshpass installiert, oder?
 
Zurück
Oben