Python und SecureFTP

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Samstag 28. Februar 2004, 10:35

Hallo,

gibt es in Python die Möglichkeit, Daten per SFTP über SSH2 (SecureFTP) oder SCP (Secure Copy) zu senden bzw. zu empfangen?

Stephan
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Sonntag 29. Februar 2004, 14:06

AFAIK geht das mit twisted:

http://twistedmatrix.com/documents/current/api/


HTH

fs111
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Sonntag 29. Februar 2004, 19:54

Hi,

Danke für den Link. Hast Du schon mal damit gearbeitet? Ich würde mir gerne mal etwas Code dazu anschauen (bin noch ziemlich neu in der Materie).

Stephan
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Dienstag 2. März 2004, 09:35

Nein leider nicht, steht aber mit ganz oben auf meiner TODO Liste.

fs111
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Mittwoch 3. März 2004, 11:42

Hi,

ich habe mal gegoogelt und eine eine Seite gefunden, die ich interessant finde.
http://www-106.ibm.com/developerworks/l ... wist4.html

Ich bin aber schon beim Installieren der notwendigen Module abgestorben. Ich bekomme beim Compilieren von pycrypto mit MinGW immer eine Fehlermeldung:
error: command 'gcc' failed with exit status 1 :(
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 13. Januar 2005, 21:53

Gibt es dazu eigentlich Neuigkeiten???

Beispielcode oder so?
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 14. Januar 2005, 18:35

Hab was gefunden: http://www.lag.net/paramiko/ aber dafür benötigt man das Python Cryptography Toolkit und das gibt es noch nicht für Python 2.4 :(
s. "Suche: PyCrypto für Python 2.4" http://python.sandtner.org/viewtopic.php?t=2553
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 14. Januar 2005, 19:19

Stephan hat geschrieben:Ich bin aber schon beim Installieren der notwendigen Module abgestorben. Ich bekomme beim Compilieren von pycrypto mit MinGW immer eine Fehlermeldung:
error: command 'gcc' failed with exit status 1 :(
Vielleicht hast du ja kein libssl-dev installiert. Hier gibt es meine MinGW Binaries und Twisted habe ich auch fast fertig.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 14. Januar 2005, 19:56

Super vielen Dank für deine Binaries!!! Sollte man einen Link auf die Python.org Seite machen ;)

Hab mal http://python.sandtner.org/viewtopic.php?p=14112 gemacht :)


Aber zurück zum sFTP:

Code: Alles auswählen

import paramiko

ServerAdr="[i]ServerAdr.de[/i]:22"

print "Transport ",ServerAdr,"...",
t = paramiko.Transport( ServerAdr )
print "OK"

print "Connect...",
t.connect(None, "[i]UserName[/i]", "[i]PassWort[/i]", None)
print "OK"

sftp = paramiko.SFTP.from_transport(t)

print sftp.listdir("./")
sftp.close()
t.close()
Leider bekomme ich immer einen Traceback, das die Authorisierung fehlgeschlagen ist:

Code: Alles auswählen

Traceback (most recent call last):
  File "sftp01.py", line 12, in ?
    t.connect(None, "XXX", "XXX", None)
  File "D:\Python\Python24\lib\site-packages\paramiko\transport.py", line 763, in connect
    self.auth_password(username, password)
  File "D:\Python\Python24\lib\site-packages\paramiko\auth_transport.py", line 215, in auth_password
    return self._wait_for_response(my_event)
  File "D:\Python\Python24\lib\site-packages\paramiko\auth_transport.py", line 275, in _wait_for_response
    raise e
paramiko.ssh_exception.SSHException: Authentication failed.
Leider weiß ich nicht, wie ich mehr Details beim Connecten Abfragen kann...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 14. Januar 2005, 20:09

jens hat geschrieben:Super vielen Dank für deine Binaries!!! Sollte man einen Link auf die Python.org Seite machen ;)
Kannst ja dort ins Wiki schreiben.
jens hat geschrieben:Aber zurück zum sFTP:

Code: Alles auswählen

import paramiko

ServerAdr="[i]ServerAdr.de[/i]:22"

print "Transport ",ServerAdr,"...",
t = paramiko.Transport( ServerAdr )
print "OK"

print "Connect...",
t.connect(None, "[i]UserName[/i]", "[i]PassWort[/i]", None)
print "OK"

sftp = paramiko.SFTP.from_transport(t)

print sftp.listdir("./")
sftp.close()
t.close()
Leider weiß ich nicht, wie ich mehr Details beim Connecten Abfragen kann...
Ich würde es so wie in der README machen:

Code: Alles auswählen

t.connect(username="[i]UserName[/i]", password="[i]PassWort[/i]")
und bei mir hat sftp kein close(), aber das nur nebenbei.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 14. Januar 2005, 20:21

Leonidas hat geschrieben:Ich würde es so wie in der README machen:

Code: Alles auswählen

t.connect(username="[i]UserName[/i]", password="[i]PassWort[/i]")
Jep! Das sieht besser aus ;) Leider funktioniert das aber genauso wenig :(

Hast du selber schon mal eine Verbindung zu einem SFTP Server hinbekommen???

Hab noch ein paar Beispiele gefunden:
http://cs.usfca.edu/~afedosov/netgreg/cgi-bin/ssh.py
http://www.bitpim.org/pyxr/c/projects/b ... ff.py.html

Hilft mir aber auch nicht weiter :(
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 14. Januar 2005, 21:32

Hab hier mal versucht die ganze Sacher ohne das "vorgefertigte" connect zu benutzen, um zu sehen, wodrann der Connect scheitert... Hab mich an den Beispielen gehalten:

Code: Alles auswählen

import sys, socket
import paramiko

ServerAdr   = "[i]ServerAdr.de[/i]"
ServerPort  = 22
User        = "[i]XXX[/i]"
Pass        = "[i]XXX[/i]"

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect( (ServerAdr, ServerPort) )

print "Transport",ServerAdr,"...",
t = paramiko.Transport( sock )
print "OK",t

t._log(9,"D:\\temp\\paramiko.log")

print "start client...",
t.start_client()
print "OK",t

print "-"*80
print "isAlive:",t.isAlive()
print "isDaemon:",t.isDaemon()
print "is_active:",t.is_active()
print "is_authenticated:",t.is_authenticated()
print "-"*80

print "auth_password...",
t.auth_password( username=User, password=Pass )
print "OK"

print "open session...",
session = t.open_session()
print "OK"
Die Ausgabe:

Code: Alles auswählen

Transport ServerAdr.de ... OK <paramiko.Transport at 0x9d1dd0 (unconnected)>
start client... OK <paramiko.Transport at 0x9d1dd0 (connecting)>
--------------------------------------------------------------------------------
isAlive: True
isDaemon: False
is_active: True
is_authenticated: False
--------------------------------------------------------------------------------
auth_password...
Traceback (most recent call last):
  File "sftp02.py", line 37, in ?
    t.auth_password( username=User, password=Pass )
  File "D:\Python\Python24\lib\site-packages\paramiko\auth_transport.py", line 198, in auth_password
    raise SSHException('No existing session')
paramiko.ssh_exception.SSHException: No existing session
Er mekert das keine Session existiert... aber t.open_session() kommt eigentlich erst nach der Authorisation... Hab versuchsweise mal davor gemacht: Dann erhalte ich den Fehler No handlers could be found for logger "paramiko.transport" Danach bleibt das Programm einige Zeit hängen... Aber es geht weiter mit der Authorisation mit wieder dem selben Fehler "No existing Session"...
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 14. Januar 2005, 21:56

Was mir gerade einfällt... Ich hab noch keine Beispiele gefunden, die das neue paramiko.SFTPClient() benutzt... Vielleicht klappt es ja damit...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 14. Januar 2005, 22:09

Code: Alles auswählen

import paramiko

t = paramiko.Transport("192.168.123.2")
t.connect(username="marek", password="andernmal")
sftp = paramiko.SFTP.from_transport(t)
print sftp.listdir("./")
t.close()
Also bei mir geht das und ich bekomme ein Directory Listing. Dabei greift das Script auf meinen Router 192.168.123.2 zu, auf dem ein OpenSSH 3.4p1 auf Port 22 läuft, deswegen gebe ich den Port nicht an, aber auch mit Portangebe geht es wunderbar. Probleme gibt es nur, wenn das Passwort schlicht und einfach.. falsch ist. Dann bekomme ich auch SSHException: Authentication failed. und danach noch einen No handlers could be found for logger "paramiko.transport", wenn ich versuche einen SFTP.from_transport(t) zu machen. Aber das ist ja nicht so sehr verwunderlich.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 14. Januar 2005, 22:23

Also ich hab zwei Server mit den ich es testen kann... Und ich kann eine Verbindung mir FileZilla und dem User/Passwort aufbauen...

Der eine Server ist vom Typ "SFTP über SSH2", bei dem bekomme ich SSHException: Authentication failed
Der andere Server ist vom Typ "FTP über SSL (Explizite Verschlüsselung)" und damit bekomme ich nach einiger Wartezeit auch einen Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "sftp02.py", line 22, in ?
    t.connect(username=User, password=Pass)
  File "D:\Python\Python24\lib\site-packages\paramiko\transport.py", line 745, in connect
    raise e
EOFError
Bei beiden Servern habe ich passiver Modus in FileZilla gewählt...

Welche Server Einstellungen hast du denn?
Antworten