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
Liens | Site |
---|---|
subprocess | doc python |
The only simple way to do SSH in Python today is to use subprocess + OpenSSH... | github.com |
check ssh tunnel from Python | github.com |
Kill a running subprocess call | stackoverflow |
ssh with Subprocess.popen | stackoverflow |
Python - subprocess.Popen - ssh -t user@host 'service --status-all' | stackoverflow |
subprocess | docs.python |
Python popen() insert password when asked for | stackoverflow |
Use subprocess to send a password | stackoverflow |
SSH Password through Python Subprocess | stackoverflow |
How to interact with ssh using subprocess module | stackoverflow |
Sending a password over SSH or SCP with subprocess.Popen | stackoverflow |
Enter an ssh password using the standard python library (not pexpect) | stackoverflow |
SSH REMOTE RUN OF A LOCAL FILE | bogotobogo.com |