bibliothèques python pour la gestion de ssh

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

en particulier, je vais avoir besoin de lire le contenu des fichiers depuis le 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 serveur.

peut-être certains experts pourraient-ils donner des conseils sur ce que la Bibliothèque est la meilleure et préciser les avantages ou les inconvénients?

23
demandé sur yart 2009-12-21 12:31:28

4 réponses

Bibliothèques, Des Wrappers:

  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 quelques fonctions de plus haut niveau. Si ce dernier est adapté à vos besoins, je vous suggère d'essayer 1)


mise à Jour: 1) est maintenant disparu (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 seulement pour obtenir une impression; le code n'est pas testé.

22
répondu miku 2017-09-12 15:38:57

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 subprocess module.

import subprocess
subprocess.check_call(['ssh', 'server', 'command'])
subprocess.check_call(['scp', 'server:file', 'file'])
22
répondu Tobu 2009-12-21 09:51:15

Essayez de prendre un coup d'oeil à Conque Tordu. Il gère tout ce que vous voulez. Si vous êtes à la recherche d'un transfert de fichier de type SCP, vous pouvez toujours utiliser le module python secsh-filexfer.

3
répondu Douglas Mayle 2009-12-21 09:37:46

la seule fonctionnalité qu'aucune des bibliothèques mentionnées ci-dessus ne fournit est une connexion simultanée à plusieurs serveurs.Dans l'ère d'aujourd'hui où les administrateurs système ont besoin d'exécuter des commandes sur des centaines de serveurs,les bibliothèques qui peuvent gérer l'exécution de commandes en parallèle sont très importantes. Les deux bibliothèques que je connais sont :

  1. Déclencheur

  2. Parallel-SSH

Déclenchement est beaucoup plus qu'un SSH wrapper et plus d'une bibliothèque de réseau, il utilise L'API Twisted core pour activer les opérations d'e/s simultanées.

Parallel-SSH est une bibliothèque qui est thin wrapper au-dessus de Paramiko mais utilise Gevent sous le capot pour activer les opérations d'E/S simultanées

2
répondu Amistad 2016-08-01 19:37:52