web-dev-qa-db-fra.com

python bibliothèques pour la gestion de ssh

Je vais écrire le premier code pour gérer les commandes ssh sur python et j'ai fait une recherche sur le stackoverflow et je peux voir qu'il y a plusieurs bibliothèques python qui peuvent être utilisé pour gérer les commandes passées par ssh, comme paramiko , pexpect et peut-être quelques autres.

En particulier, je devrai lire le contenu des fichiers du serveur distant, copier des fichiers via ssh/scp, obtenir la sortie du serveur distant après avoir démarré le script sur le serveur distant.

Peut-être que certains experts pourraient conseiller quelle bibliothèque est la meilleure et préciser les avantages ou les inconvénients?

26
yart

Bibliothèques, emballages:

  1. http://www.lag.net/paramiko/

    #!/usr/bin/env python
    import paramiko
    from contextlib import contextmanager
    Host = '192.168.10.142'
    username = 'slacker'
    password = 'password'
    def create_ssh(Host=host, username=username, password=password):
        ssh = paramiko.SSHClient()
        ssh.set_missing_Host_key_policy(paramiko.AutoAddPolicy()) 
        try:
           print "creating connection"
           ssh.connect(Host, username=username, password=password)
           print "connected"
           yield ssh
        finally:
           print "closing connection"
           ssh.close()
           print "closed"
    

1) utilise le 2) et fournit des fonctions de niveau supérieur. Si ces derniers répondent à vos besoins, je vous suggère d'essayer 1)


Mise à jour: 1) a disparu maintenant (2017-09-12)

  1. http://media.commandline.org.uk/code/ssh.txt (exemple d'utilisation: https://zeth.net/archive/2008/05/29/sftp- python-really-simple-ssh / )

    s = ssh.Connection('example.com', 'warrior', password = 'lennalenna')
    s.put('/home/warrior/hello.txt', '/home/zombie/textfiles/report.txt')
    s.get('/var/log/strange.log', '/home/warrior/serverlog.txt')
    s.execute('ls -l')
    s.close()
    

Remarque : Les exemples de code ci-dessus sont fournis uniquement pour obtenir une impression; le code n'est pas testé.

24
miku

Puisque vous ne faites rien de spécial au niveau du protocole, vous n'avez probablement pas besoin que le protocole soit entièrement implémenté en python, et vous pouvez simplement exécuter des commandes ssh/scp en utilisant le module subprocess.

import subprocess
subprocess.check_call(['ssh', 'server', 'command'])
subprocess.check_call(['scp', 'server:file', 'file'])
25
Tobu

La seule caractéristique qu'aucune des bibliothèques décrites ci-dessus ne fournit est une connexion simultanée à plusieurs serveurs.Dans l'ère actuelle où les administrateurs système doivent exécuter des commandes sur des centaines de serveurs, les bibliothèques qui peuvent gérer l'exécution de commandes parallèles sont très importantes. Les deux bibliothèques que je connais sont:

  1. Déclencheur

  2. Parallel-SSH

Le déclencheur est bien plus qu'un wrapper SSH et plus d'une bibliothèque de mise en réseau, il utilise l'API Twisted core pour permettre des opérations d'E/S simultanées.

Parallel-SSH est une bibliothèque qui est un wrapper fin sur Paramiko mais utilise Gevent sous le capot pour permettre des opérations d'E/S simultanées

3
Amistad

Essayez de jeter un œil à Twisted Conch . Il gère tout ce que vous voulez. Si vous cherchiez simplement un transfert de fichiers de style SCP, vous pouvez toujours utiliser le module python secsh-filexfer .

3
Douglas Mayle