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?
4 réponses
Bibliothèques, Des Wrappers:
-
#!/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)
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é.
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'])
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.
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 :
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