Seite 1 von 1

Passworteingabe im Terminal per Skript

Verfasst: Freitag 7. Juni 2019, 12:37
von El_Capitan
Hey,

ich würde gerne ein Verzeichnis per Python-Skript auf einen anderen Server kopieren. Zeile die das können, und die ich kenne, sind folgende:

Code: Alles auswählen

Befehl_Verzeichnis_kopieren="scp -r " + str(Startverzeichnis) + " " + str(Benutzer) + str(Zielverzeichnis)

os.system(Befehl_Verzeichnis_kopieren)

os.popen(Befehl_Verzeichnis_kopieren)

subprocess.Popen(Befehl_Verzeichnis_kopieren)
Das Skript wird im Terminal gestartet. Es wird dann zur Eingabe eins Passwortes aufgefordert. Wenn ich das Passwort manuell eingebe funktioniert das Kopieren wie es soll. Allerdings möchte ich das Passwort nicht manuell eingeben müssen.

Hat jemand eine Idee wie ich die Passworteingabe automatisieren kann?

MfG

Re: Passworteingabe im Terminal per Skript

Verfasst: Freitag 7. Juni 2019, 12:44
von __deets__
Vergiss bitte gleich, dass es os.system und os.popen gibt. Benutz immer subprocess. Und bitte gewoehn dir auch sofort ab, Strings mit + zusammenzustoppeln. Das macht man mit format, oder ab Python 3.6 mit den sehr angenehmen f-Strings.

Bezueglich deines eigentlichen Problems: die richtige Loesung dafuer besteht normalerweise darin, das der Benutzer seinen public SSH key auf dem Zielsystem in die Datei ~/.ssh/authorized_keys eintraegt, und daraufhin SSH ohne Passwort-Abfrage funktioniert. Mit Python hat das aber erstmal nichts zu tun.

Re: Passworteingabe im Terminal per Skript

Verfasst: Freitag 7. Juni 2019, 13:04
von El_Capitan
Vielen Dank für die schnelle Antwort!
Ist dein Vorschlag sicherheitstechnisch unbedenklich?

Ich vermute ich muss mich für die Umsetzung mit dem Administrator in Verbindung setzten, bzw. Genehmigung einholen. Oder kann ich das auch selbst einrichten?

Ziel meines Projektes ist es, auf verschiedene Server automatisch zuzugreifen. Die meisten davon werden nicht von meiner Institution verwaltet. Da ich mich in dem Bereich nicht auskenne kann ich im Moment nicht einschätzen ob dein Vorschlag hier bei mir umsetzbar ist.
Falls es nicht umsetzbar ist, gibt es dann eine Möglichkeit das Passwort automatisiert einzugeben?
(Klar, das ist dann sicherheitstechnisch auch nicht so toll, da das Passwort in Klarschrift im Code hinterlegt ist. Aber dann funktioniert es wenigstens, ohne dass ich andere Leute brauche.)

MfG

Re: Passworteingabe im Terminal per Skript

Verfasst: Freitag 7. Juni 2019, 13:07
von sparrow
_Du_ bist der Benutzer auf dem Zielsystem.

Re: Passworteingabe im Terminal per Skript

Verfasst: Freitag 7. Juni 2019, 13:12
von __blackjack__
Ergänzend: Für `subprocess` sollte man insgesamt auch keine Zeichenkette mit dem Befehl und den Argumenten erstellen, sondern das selbst schon als Liste aufbereiten, damit man keine unnötige Shell braucht die das für einen macht, und mit der man sich letztlich einen Teil der Probleme einfängt wegen denen man `os.system()` und `os.popen*()` nicht benutzen sollte.

Beim `os.popen()` bekommt man zudem noch Probleme wenn man danach nicht die Ausgabe liest, weil es dann passieren kann, dass ``scp`` blockiert, wenn der Puffer zwischen den Prozessen voll ist.

Bei `subprocess` währen dann auch die `run()`-Funktion eher das was `os.system()` macht, weil `Popen` den Prozess asynchron startet und dann gleich(zeitig) im Python-Programm weiter gemacht wird.

Re: Passworteingabe im Terminal per Skript

Verfasst: Freitag 7. Juni 2019, 13:20
von Sirius3
@El_Capitan: Strings stückelt man nicht mit + zusammen, aber vor allem benutzt man keine Strings um Befehle auszuführen, dafür packt man die Parameter in eine Liste.

Statt eines externen Programms kann man auch ein Python-Paket wie paramiko benutzen.

Re: Passworteingabe im Terminal per Skript

Verfasst: Freitag 7. Juni 2019, 13:44
von __deets__
Wenn du Zugriff auf das System hast, sollte das unter normalen Umstaenden gehen. Und es ist sicherheitstechnisch besser, als irgendwo hart-kodierte Passwoerter rumliegen zu haben. Der private key (der auf DEINEM System verbleibt) sollte natuerlich auch passwort-geschuetzt sein, aber mit SSH-agent musst du den nur einmal eingeben (oder das ist schon eingebaut in dein OS).

Wenn die Administratoren der entfernten Systeme das nicht einsehen/unterdruecken, dann sind sie ihr Geld nicht wert...

Und ja, es gibt einen Weg, das Passwort einzugeben. Den verrate ich aber erst, wenn du dich mal ueber authorized keys schlau gemacht hast.