GNU/Linux >> Tutoriels Linux >  >> Linux

Quel est le moyen le plus simple de SSH en utilisant Python ?

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.


Linux
  1. Qu'est-ce qu'une Rolling Release Linux et quel est le véritable avantage de l'utiliser

  2. Comment connecter un hôte distant à l'aide de la commande ssh

  3. Quelle est la bonne façon d'utiliser inotify ?

  4. Quelle est la bonne façon d'insérer un onglet dans sed?

  5. Quelle est la différence entre utiliser `sh` et `source` ?

Qu'est-ce que SSH ?

Utilisation du fichier de configuration SSH

Quelle est la bonne façon d'installer jdk sur linux

Quel est le moyen le plus simple de libérer de l'espace sur un disque dur ?

Quelle est la meilleure façon d'apprendre SELinux ?

Quel est le moyen le plus rapide d'exécuter un script ?