[Snippet] Python & SSH mit Paramiko im Beispiel

[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.

Python LogoWie 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?