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:
SSHClientist 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.RejectPolicylehnt unbekannte Server ab. Du trägst den Server vorher einmal mitssh-keyscan -p 2222 localhost >> ~/.ssh/known_hostsein oder verbindest dich einmal mit dem normalenssh-Programm. Bequem, aber unsicher istAutoAddPolicy: 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.