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.