Python Lernhandbuch

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

Sauber mit with und Fehlerbehandlung

Verbindungen müssen sicher geschlossen werden. SSHClient und SFTPClient unterstützen with.

python
import os
import paramiko


def sftp_verbindung():
    ssh = paramiko.SSHClient()
    ssh.load_system_host_keys()
    ssh.set_missing_host_key_policy(paramiko.RejectPolicy())
    ssh.connect(
        hostname=os.environ['SFTP_HOST'],
        port=int(os.environ.get('SFTP_PORT', '22')),
        username=os.environ['SFTP_USER'],
        password=os.environ['SFTP_PASSWORD'],
        timeout=15,
    )
    return ssh


try:
    with sftp_verbindung() as ssh, ssh.open_sftp() as sftp:
        print(sftp.listdir('.'))
except paramiko.AuthenticationException:
    print('Anmeldung fehlgeschlagen')
except paramiko.SSHException as e:
    print('SSH-Problem:', e)         # z. B. unbekannter Host Key
except OSError as e:
    print('Netzwerk- oder Dateifehler:', e)   # Server nicht erreichbar, Datei fehlt
Fehler Bedeutung
paramiko.AuthenticationException Benutzername, Passwort oder Schlüssel falsch
paramiko.SSHException Allgemeine SSH-Probleme, auch unbekannter Host Key
FileNotFoundError Datei oder Ordner existiert nicht (stat, get, listdir)
OSError und TimeoutError Netzwerk nicht erreichbar, Zeitüberschreitung

Reihenfolge der except-Blöcke beachten: AuthenticationException ist eine Unterart von SSHException und muss davor stehen.

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

← Zurück