SSH-Verbindung herstellen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
NewPython19
User
Beiträge: 45
Registriert: Freitag 19. Juli 2019, 07:17

Mittwoch 31. Juli 2019, 07:31

Hallo,

ich möchte mit meinem Windows-PC eine SSH-Verbindung zu einem Linux-Rechner über Python aufbauen. Hierfür verwende ich die Bibliothek "Paramiko" .
In der Paramiko Dokumentation habe ich folgendes Beispiel gefunden:

Code: Alles auswählen

	client = SSHClient()
	client.load_system_host_keys()
	client.connect('ssh.example.com')
	stdin, stdout, stderr = client.exec_command('ls -l')
Dieses habe ich an meine Bedingungen soweit erstmal angepasst:

Code: Alles auswählen

	client = paramiko.SSHClient()
        client.load_system_host_keys()
	try:
        	client.connect(ip, 22, user, password)
        	stdin, stdout, stderr = client.exec_command('ls -l')
        except:
        	print("Error"
Bei mir wird jedes Mal der Fehler (print("Error") angezeigt. Kann mir jemand sagen, ob ich bei den Geräten vorher was einstellen muss bzw. ob ich im Code noch Ergänzungen brauche?
__deets__
User
Beiträge: 6054
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 31. Juli 2019, 07:59

Ich kann dir vor allem sagen, dass du den Code verschlimmbessert hast durch dein allumfassendes try/except, der aus einem informativen Fehler ein kümmerliches “error” macht. Schmeiß das raus, und dann wirst du einen Fehler bekommen der entweder schon dir weiterhilft, oder poste ihn hier & wir gucken drauf.
NewPython19
User
Beiträge: 45
Registriert: Freitag 19. Juli 2019, 07:17

Mittwoch 31. Juli 2019, 08:13

Ok, also ich hab es umgeändert zu:

Code: Alles auswählen

	client = paramiko.SSHClient()
    	client.load_system_host_keys()
   	client.connect(ip, 22, user, password)
        stdin, stdout, stderr = client.exec_command('ls -l')
Ich bekomme nun diesen Fehler:
paramiko.ssh_exception.SSHException: Server "ip" not found in known_hosts
(Ich habe die IP-Adresse in der Fehlermeldung in "ip" umbenannt :wink:)
__deets__
User
Beiträge: 6054
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 31. Juli 2019, 08:17

Und hast du die Fehlermeldung mal gegoogelt?
NewPython19
User
Beiträge: 45
Registriert: Freitag 19. Juli 2019, 07:17

Mittwoch 31. Juli 2019, 08:23

Habe folgende Änderungen ergänzt:

Code: Alles auswählen

        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
        client.load_system_host_keys()
        client.connect(ip, 22, user, password)
        stdin, stdout, stderr = client.exec_command('cd /')
Keine Fehlermeldung und ich kann bspw. den Inhalt des Verzeichnis anzeigen lassen. :wink:
DasIch
User
Beiträge: 2510
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mittwoch 31. Juli 2019, 21:52

Durch diese Änderung hast du dir eine Sicherheitslücke eingefangen. Sollte ein Angreifer eine MitM Attacke ausführen, würdest du dessen SSH Host Key akzeptieren ohne auch nur eine Warnung auszugeben.

Du solltest den Host Key von deinem Linux PC auf dem Windows PC in den system host keys speichern statt beliebige host keys zu akzeptieren.
__deets__
User
Beiträge: 6054
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 31. Juli 2019, 21:59

@DasIch: außer bei der ersten Verbindung nicht. Womit MIM schon deutlich unwahrscheinlicher wird.
NewPython19
User
Beiträge: 45
Registriert: Freitag 19. Juli 2019, 07:17

Donnerstag 1. August 2019, 07:24

Da ich nur in einem kleinen Rahmen mit meinem Programm arbeite, ist ein Sicherheits Key finde ich ein bisschen überflüssig für den Anfang. Aber ich behalte es mal im Hinterkopf. :wink:

Wie lang bleibt die SSH-Verbindung eigentlich aktiv? Ich mein wenn ich bspw. zu Beginn einer Applikation die Verbindung aufbaue, bleibt die Verbindung während der Dauer/Ausführung der Applikation aktiv oder endet sie bspw. bei Öffnen eines neuen Fensters?
__deets__
User
Beiträge: 6054
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 1. August 2019, 08:19

Fenster haben damit nichts zu tun. Sondern die Lebenszeit des Objektes selbst. Und bei Netzwerk kann natürlich prinzipiell immer was schief gehen.
NewPython19
User
Beiträge: 45
Registriert: Freitag 19. Juli 2019, 07:17

Mittwoch 7. August 2019, 20:53

Kann über eine solche SSH-Verbindung auch eine Datei auf dem anderen Rechner ausgeführt werden? Wenn ja, wie?
Benutzeravatar
sparrow
User
Beiträge: 1289
Registriert: Freitag 17. April 2009, 10:28

Mittwoch 7. August 2019, 21:01

Du hast doch in deinem Beispiel bereits einen Befehl ausgeführt.
Sirius3
User
Beiträge: 10223
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 7. August 2019, 21:02

Das tust Du doch schon, z.B. mit `ls -l`.
NewPython19
User
Beiträge: 45
Registriert: Freitag 19. Juli 2019, 07:17

Donnerstag 8. August 2019, 06:38

Aber damit kann ich keine Datei z.b. "test.py" ausführen oder?
Benutzeravatar
__blackjack__
User
Beiträge: 3868
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 8. August 2019, 07:13

@NewPython19: Wenn die ausführbar ist, natürlich. Warum nicht?
“There's also a certain pleasure in actually getting things to work in Java, somewhat like the pleasure, I imagine, of building ships in bottles.”
— David Cook in c.l.p
DasIch
User
Beiträge: 2510
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Donnerstag 8. August 2019, 10:46

Wenn es dir darum geht dich mit einem anderen Computer zu verbinden um da Python Code auszuführen, ist vielleicht execnet einen Blick wert. Damit kann man auf einem anderen Computer (z.B. über SSH) einen Interpreter starten und darauf Code ausführen. Execnet nimmt einem damit einiges an Arbeit ab und abstrahiert dass recht nett.
Antworten