2009-07-26 19 views
3

Ich frage mich, was ist der beste Weg, um parallele SSH-Verbindungen in Python zu behandeln. Ich muss mehrere SSH-Verbindungen öffnen, um im Hintergrund zu bleiben und Befehle in interaktiver oder zeitgesteuerter Batch-Art zu senden. Ist dies mit den Paramiko-Bibliotheken möglich? Es wäre nett, für jede Verbindung keinen anderen SSH-Prozess zu erstellen.Parallel SSH in Python

Danke.

Antwort

1

Sie können einfach subprocess.Popen für diesen Zweck verwenden, ohne Probleme.

Sie möchten jedoch einfach Cronjobs auf den Remote-Computern installieren. :-)

1

Die paramiko API Dokumentation lesen, es sieht so aus, als ob es möglich ist, eine SSH Verbindung zu öffnen und so viele SSH Tunnels wie gewünscht zu multiplexen. Häufige ssh-Clients (openssh) machen solche Dinge oft automatisch hinter der Szene, wenn bereits eine Verbindung offen ist.

+0

Eine Sache bewusst zu sein, wenn ssh-Tunnel verwenden: Wenn Ihr Tunnel zu einer anderen Maschine als die Maschine verbinden haben Sie eigentlich ssh-ed auf, dann ist der Kanal zwischen der ssh-ed-zu-Maschine und die getunnelte Maschine wird * nicht * sicher sein. –

+0

Offensichtlich ist der einzige sichere Teil zwischen dem Client und dem Server. Wenn ein böswilliger Benutzer es schaffen würde, einen WireShark beim Loopback auf dem Server zu erhalten, ist zwischen dem Tunnelendpunkt auf dem Server und dem Port des Prozesses, den man gerade anspricht, auch nichts sicher. Das hat aber nichts damit zu tun, was ich gesagt habe, im Grunde genommen, wenn ich ssh server.example dann in einem anderen Terminal ssh server.example wieder einstelle. Einige Clients (openssh) erstellen keine neue TCP-Verbindung, sondern nur einen anderen chanel auf dem ssh-Transport, der bereits geöffnet ist. – ewanm89

3

Es könnte sich lohnen herauszufinden, welche Optionen in Twisted verfügbar sind. Zum Beispiel können die Twisted.Conch Seite Berichte:

http://twistedmatrix.com/users/z3p/files/conch-talk.html

Im Gegensatz zu OpenSSH, die Conch Server Gabel keinen Prozess für jede eingehende Verbindung. Stattdessen verwendet es die Twisted-Drossel, um die Verbindungen zu multiplexen.

3

Ja, Sie können dies mit Paramiko tun.

Wenn Sie eine Verbindung zu einem Server herstellen, können Sie mehrere Kanäle über eine einzige Verbindung ausführen. Wenn Sie eine Verbindung zu mehreren Servern herstellen, können Sie mehrere Verbindungen in separaten Threads starten. Keine Notwendigkeit, mehrere Prozesse zu verwalten, obwohl Sie das Multiprocessing-Modul für das Threading-Modul ersetzen könnten und den gleichen Effekt haben.

Ich habe in einer Weile nicht in verdrehte Conch geschaut, aber es sieht aus, als ob es wieder Updates erhält, was nett ist. Ich könnte Ihnen keinen guten Vergleich zwischen den beiden geben, aber ich finde, Paramiko ist leichter in Gang zu bringen. Es erfordert ein wenig mehr Aufwand, um in Twisted zu kommen, aber es könnte es wert sein, wenn Sie andere Netzwerkprogrammierung tun.

-1

Dies ist möglicherweise nicht relevant für Ihre Frage. Aber es gibt Werkzeuge wie pssh, clusterssh etc., die parallel Verbindungen herstellen können. Du kannst Expect mit Pssh verbinden, um sie auch zu kontrollieren.

1

Ich habe clustersh versucht, und ich mag das Multiwindow-Modell nicht. Im allgemeinen Fall zu verwirrend, wenn alles funktioniert.

Ich habe versucht, Pssh, und es hat ein paar Probleme mit Zitat-Escaping und Passwort-Eingabeaufforderung.

Das Beste, was ich verwendet habe, ist dsh:

 Description: dancer's shell, or distributed shell 
Executes specified command on a group of computers using remote shell 
methods such as rsh or ssh. 
. 
dsh can parallelise job submission using several algorithms, such as using 
fan-out method or opening as much connections as possible, or 
using a window of connections at one time. 
It also supports "interactive mode" for interactive maintenance of 
remote hosts. 
. 
This tool is handy for administration of PC clusters, and multiple hosts. 

Es ist sehr flexibel in der Terminplanung und Topologie: Sie etwas in der Nähe eines anrufenden Baum verlangen, wenn es sein muss. Die Standardeinstellung ist jedoch eine einfache Topologie eines Befehlsknotens für viele Blattknoten.

http://www.netfort.gr.jp/~dancer/software/dsh.html