Python Lernhandbuch

Kapitel 13: SFTP-Server anbinden · Abschnitt 2 von 4

Verbinden und Dateien übertragen

python
import paramiko

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()                                  # bekannte Server aus ~/.ssh/known_hosts
ssh.set_missing_host_key_policy(paramiko.RejectPolicy())     # unbekannte Server ablehnen

ssh.connect(
    hostname='localhost',
    port=2222,
    username='lernen',
    password='geheim',
    timeout=10,
)

sftp = ssh.open_sftp()

print(sftp.listdir('upload'))                       # Namen im Ordner
sftp.put('lokal.csv', 'upload/lokal.csv')           # hochladen
sftp.get('upload/lokal.csv', 'kopie.csv')           # herunterladen

sftp.close()
ssh.close()

Was passiert:

  • SSHClient ist die Verbindung. Beim ersten Kontakt mit einem Server prüft SSH, ob dessen Schlüssel (Host Key) bekannt ist. Das schützt vor Man-in-the-middle-Angriffen.
  • RejectPolicy lehnt unbekannte Server ab. Du trägst den Server vorher einmal mit ssh-keyscan -p 2222 localhost >> ~/.ssh/known_hosts ein oder verbindest dich einmal mit dem normalen ssh-Programm. Bequem, aber unsicher ist AutoAddPolicy: Sie akzeptiert jeden Server ungeprüft. Verwende sie nur zum Testen.
  • open_sftp() öffnet den SFTP-Kanal über die SSH-Verbindung.
  • Pfade sind immer Strings mit /, auch wenn dein Client Windows ist.
Parameter von ssh.connect(hostname, ...) Bedeutung
hostname Servername oder IP
port=22 SSH-Port
username, password Anmeldung mit Passwort
key_filename Pfad zur privaten Schlüsseldatei (Anmeldung mit Schlüssel, sicherer)
pkey Bereits geladenes Schlüsselobjekt
passphrase Passwort für einen geschützten Schlüssel
timeout Wartezeit beim Verbinden in Sekunden
look_for_keys=True, allow_agent=True Probiert Schlüssel aus ~/.ssh und dem SSH-Agent automatisch aus

Mit Schlüssel anmelden (empfohlen): ssh.connect('server', username='lernen', key_filename='/pfad/zum/id_ed25519'). So braucht dein Programm kein Passwort im Klartext.

Tipp: Bei Python-Beispielen kannst du auf ▶ Ausprobieren klicken, den Code verändern und direkt ausführen.

← Zurück