J'ai écrit des liaisons Python pour libssh2. Libssh2 est une bibliothèque côté client implémentant le protocole SSH2.
import socket
import libssh2
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('exmaple.com', 22))
session = libssh2.Session()
session.startup(sock)
session.userauth_password('john', '******')
channel = session.channel()
channel.execute('ls -l')
print channel.read(1024)
Je ne l'ai pas essayé, mais ce module pysftp pourrait aider, qui à son tour utilise paramiko. Je crois que tout est côté client.
La commande intéressante est probablement .execute()
qui exécute une commande arbitraire sur la machine distante. (Le module comporte également .get()
et .put
méthodes qui font davantage allusion à son caractère FTP).
MISE À JOUR :
J'ai réécrit la réponse après que l'article de blog auquel j'étais initialement lié n'est plus disponible. Certains des commentaires faisant référence à l'ancienne version de cette réponse auront désormais l'air bizarre.
Vous pouvez le coder vous-même en utilisant Paramiko, comme suggéré ci-dessus. Alternativement, vous pouvez regarder Fabric, une application python pour faire tout ce que vous avez demandé :
Fabric est une bibliothèque Python et un outil de ligne de commande conçu pour rationaliser le déploiement d'applications ou l'exécution de tâches d'administration système via le protocole SSH. Il fournit des outils pour exécuter des commandes shell arbitraires (soit en tant qu'utilisateur de connexion normal, soit via sudo), télécharger et télécharger des fichiers, etc.
Je pense que cela correspond à vos besoins. Ce n'est pas non plus une grande bibliothèque et ne nécessite aucune installation de serveur, bien qu'elle ait des dépendances sur paramiko et pycrypt qui nécessitent une installation sur le client.
L'application était ici. Il peut maintenant être trouvé ici.
* The official, canonical repository is git.fabfile.org
* The official Github mirror is GitHub/bitprophet/fabric
Il existe plusieurs bons articles à ce sujet, mais vous devez être prudent car il a changé au cours des six derniers mois :
Déployer Django avec Fabric
Outils du hacker Python moderne :Virtualenv, Fabric et Pip
Déploiement simple et facile avec Fabric et Virtualenv
Plus tard :Fabric ne nécessite plus l'installation de paramiko :
$ pip install fabric
Downloading/unpacking fabric
Downloading Fabric-1.4.2.tar.gz (182Kb): 182Kb downloaded
Running setup.py egg_info for package fabric
warning: no previously-included files matching '*' found under directory 'docs/_build'
warning: no files found matching 'fabfile.py'
Downloading/unpacking ssh>=1.7.14 (from fabric)
Downloading ssh-1.7.14.tar.gz (794Kb): 794Kb downloaded
Running setup.py egg_info for package ssh
Downloading/unpacking pycrypto>=2.1,!=2.4 (from ssh>=1.7.14->fabric)
Downloading pycrypto-2.6.tar.gz (443Kb): 443Kb downloaded
Running setup.py egg_info for package pycrypto
Installing collected packages: fabric, ssh, pycrypto
Running setup.py install for fabric
warning: no previously-included files matching '*' found under directory 'docs/_build'
warning: no files found matching 'fabfile.py'
Installing fab script to /home/hbrown/.virtualenvs/fabric-test/bin
Running setup.py install for ssh
Running setup.py install for pycrypto
...
Successfully installed fabric ssh pycrypto
Cleaning up...
C'est surtout cosmétique, cependant :ssh est un fork de paramiko, le responsable des deux bibliothèques est le même (Jeff Forcier, également l'auteur de Fabric), et le responsable a l'intention de réunir paramiko et ssh sous le nom de paramiko. (Cette correction via pbanka.)
Si vous souhaitez éviter tout module supplémentaire, vous pouvez utiliser le module de sous-processus pour exécuter
ssh [host] [command]
et capturer la sortie.
Essayez quelque chose comme :
process = subprocess.Popen("ssh example.com ls", shell=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output,stderr = process.communicate()
status = process.poll()
print output
Pour gérer les noms d'utilisateur et les mots de passe, vous pouvez utiliser un sous-processus pour interagir avec le processus ssh, ou vous pouvez installer une clé publique sur le serveur pour éviter l'invite de mot de passe.