Lancer une commande sur une serveur distant avec ssh et subprocess de python

Published: 05 février 2018

DMCA.com Protection Status

Dans l'objectif d'établir un tunnel ssh sur un serveur distant (machine B) en passant par python (afin de pouvoir automatiser certaines taches par exemple), on peut utiliser subprocess. Le code ci dessous montre comment lancer une commande sur une machine distante B et récupérer le résultat (source).

Remarque: cependant subprocess n'est peut être pas la meilleure approche pour réaliser cela car il n'est pas simple par exemple de spécifier le mot de passe pour établir le tunnel ssh, ou encore de lancer plusieurs commandes à la suite. Il existe alors d'autres solutions: comme pexpect ou paramiko par exemple.

import subprocess
import sys

host = "toto@machine_b.fr"

command = "ls"

ssh = subprocess.Popen(["ssh", "%s" % host, command],
                       shell=False,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if result == []:
    error = ssh.stderr.readlines()
    print("ERROR: %s" % error )
else:
    print( result )

retourne par exemple une liste des fichiers sur la machine B:

[b'bin\n', b'data\n', b'intel\n', b'projects\n', b'src\n']

Références