SSH Verbindung mit meinem Raspberry Pi auf anderen Rechnern aufbauen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
PythonNoob94
User
Beiträge: 5
Registriert: Donnerstag 17. Oktober 2019, 17:04

Hallo zusammen,
leider bin ich ein totaler Python, bzw. Programmieranfänger. Dennoch versuche ich aktuell ein Skript zu schreiben, dass sich beim start automatisch mit dem gewünschten Rechner über SSH verbindet. Ich kann mir nicht vorstellen, dass das so schwer sein kann... Aktuell sieht mein Code so aus :
import subprocess

p = subprocess.Popen(['ssh', 'Benutzer@ip'], stdout=subprocess.PIPE)
output = p.communicate()[0]
print(output)

soweit funktioniert alles wunderbar, bloß sobald die Passwort abfrage von meinem gewünschten zu ansteuernden Rechner kommt, wird das Passwort 3 mal quasi leer angegeben und es kommt die Fehlermeldung, dass das Passwort falsch eingegeben wurde und die Verbindung nicht erfolgreich war.
Nun habe ich mir überlegt, dass man auf die Passwort Abfrage mit einer If funktion reagieren kann, nur wie ich die if Funktion verschachteln soll habe ich leider gar keine Ahnung ... deshalb hoffe ich hier auf schnelle Hilfe. Natürlich könnte ich auch Putty oder ähnliches nutzen, aber das würde mein vorhaben ein wenig durchkreuzen, da ich schon eine GUI erstellt habe und später, wenn die SSH Verbindung automatisch funktioniert, diese als Funktion in der Gui ablegen. Zudem möchte ich danach auch Wörter bzw. Zeilen automatisch ändern in einer config Datei. Das heißt zum Beispiel automatisch vom Hochlaufmodus in einen Betriebsmodus schalten usw.
Ich hoffe ich konnte mein Problem gut und Verständlich schildern und vielen Dank an alle die versuchen mir zu helfen, bin dankbar für jeden Vorschlag oder auch für Kritik wie man das Problem hätte besser lösen können. Habe auch schon vieles Versucht, was ich so im Netz gefunden habe, nur leider hat es bisher nicht funktioniert.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das geht so nicht. Die Erklärung ist komplizierter als ich gerade Bock habe zu schreiben. Die Lösung ist deinen öffentlichen Schlüssel in die authorized_keys des entfernten Benutzers zu packen. Dann kann man üblicherweise ohne Passwort eine Verbindung aufbauen. Mit dem Vorteil, dass das dann auch nicht im Klartext im Skript steht. Oder du benutzt gleich paramiko. Da sollte auch der Key verwandt werden. Aber es ginge auch anders.
PythonNoob94
User
Beiträge: 5
Registriert: Donnerstag 17. Oktober 2019, 17:04

Irgendwie muss man ja auf Rückmeldungen der Konsole antworten können. Kann mir nicht vorstellen, dass das so gar nicht gehen soll. Aber danke aufjedenfall für dein Feedback. Nehme mir das mal zu Herzen, was du mir mitgeteilt hast und versuche es morgen mal umzusetzen.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe nicht gesagt, dass es gar nicht geht. Ich habe gesagt das es SO nicht geht, und das das komplizierter ist. Keys oder paramiko sind einfacher zu verwenden, und besser. Wenn du darauf bestehst das Passwort im Klartext zu übermitteln, schau dir pexpect an. Das erklärt auch was da los ist.
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

PythonNoob94 hat geschrieben: Donnerstag 17. Oktober 2019, 20:32 Irgendwie muss man ja auf Rückmeldungen der Konsole antworten können. Kann mir nicht vorstellen, dass das so gar nicht gehen soll.
Es geht schon, aber mit Applikationen bzw. der shell zu interagieren, indem man den Output "scraped" und auswertet, ist schon ziemlich zurecht gebastelt. Früher hat man sowas mit expect/tcl gemacht (pexpect ist ein Python Nachbau davon). Heute gibt es oft robustere und sauberere Methoden für soetwas und expect und co sind finde ich eine letzte Maßnahme, wenn es wirklich nicht anders geht.
PythonNoob94
User
Beiträge: 5
Registriert: Donnerstag 17. Oktober 2019, 17:04

Vielen Dank für eure Unterstützung. Ich habe mir die Kommentare zu Herzen genommen und nutze nun Paramiko dafür und es klappt wirklich wunderbar und einfach.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Paramiko hat den Vorteil, dass es mehrere Channels unterstützt. Man kann auch Dateien transferieren.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten