![[Snippet] Python & SSH mit Paramiko im Beispiel](http://city-insider.de/wp-content/uploads/python-logo.png)
[Snippet] Python & SSH mit Paramiko im Beispiel
Python wird mittlerweile von vielen Administratoren für die tägliche Arbeit eingesetzt. Zur Automatisierung von unterschiedlichen Aufgaben ist es aufgrund der einfachen Syntax wie gemacht. Paramiko ist ein externes Modul welches SSH-Verbindungen aus einer Python-Anwendung heraus zu starten. Damit eröffnen sich völlig neue Möglichkeiten.
Wie man Paramiko installiert und einrichtet konntet ihr bereits in einem anderen Artikel nachlesen. Heute will ich einfache Anwendungsbeispiele beschreiben.
Das einfachste Beispiel für eine Connection zu einem entfernten Host kann mit dem folgenden Snippet gelöst werden:
import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect( hostname='10.10.0.5', port=22, username='mon', password='pass') stdin, stdout, stderr = ssh.exec_command('date; uptime') for line in stdout.readlines(): print line.strip()
Di 12. Nov 19:55:46 CET 2013 19:55:46 up 26 days, 6:37, 0 users, load average: 0.08, 0.03, 0.05
Als erstes wird das Modul ‘paramiko’ importiert und die Klasse SSHClient() mit dem Objektnamen ‘ssh’ initialisiert. Mit der Methode connect verbinden wir uns mit dem entfernten Rechner. Als Übergabe-Parameter wird hier der hostname (in unserem Fall die IP), der Port, Username und Passwort übergeben.
Ein Kommando auf dem entfernten Rechner lässt sich mit der Methode exec_command absetzen. Der Rückgabewert wird an die drei Variablen stdin, stdout und stderr gegeben. Diese entsprechen den Standard-Datenströmen von unixartigen Betriebssystemen.
Mit einer einfachen Schleife lassen sich die Datenströme wieder auslesen.
In dem Beispiel authentifiziere ich mich mit Username und Passwort. Es ist natürlich auch möglich (und vor allem sinnvoll) die Anmeldung über einen SSH-Key durchzuführen. Mit der Zeile “ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())” sage ich dem Skript übrigens das Meldungen bzgl. der KNownHosts ignoriert werden sollen. Vollautomatisierte Arbeitsabläufe sollten nicht durch solche Meldungen blockiert werden.
Wie man sich via SSH-Key anmeldet könnt ihr im folgenden Beispiel erkennen:
import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect( hostname='10.10.0.5', port=22, username='mon', key_filename="C:\Users\NicoBecker\ssh\mon_id_rsa") stdin, stdout, stderr = ssh.exec_command('free') for line in stdout.readlines(): print line.strip()
total used free shared buffers cached Mem: 2052228 1616744 435484 0 272136 1082836 -/+ buffers/cache: 261772 1790456 Swap: 2084860 0 2084860
Das Beispiel ist dem ersten sehr ähnliche. Der einzige UNterschied ist, dass das Skript sich diesmal via SSH-Key an dem System anmeldet. Mit Paramiko sind sicherlich noch weitere interessante Beispiele möglich. Zu welchen Zwecken benutzt ihr dieses Modul?