comment obtenir la sortie de la console à partir d'un ordinateur distant (ssh + python)
Question
Je l'ai googlé "ssh python". Il y a un module merveilleux pexpect
, qui peut accéder à un ordinateur distant en utilisant ssh (avec mot de passe).
Une fois l'ordinateur distant est connecté, je peux exécuter d'autres commandes. Cependant, je ne peux pas encore le résultat en python.
p = pexpect.spawn("ssh user@remote_computer")
print "connecting..."
p.waitnoecho()
p.sendline(my_password)
print "connected"
p.sendline("ps -ef")
p.expect(pexpect.EOF) # this will take very long time
print p.before
Comment obtenir le résultat de ps -ef
dans mon cas?
La solution
Vous pouvez également enquêter sur paramiko qui est une autre bibliothèque SSH pour Python.
Autres conseils
Avez-vous essayé une approche encore plus simple?
>>> from subprocess import Popen, PIPE
>>> stdout, stderr = Popen(['ssh', 'user@remote_computer', 'ps -ef'],
... stdout=PIPE).communicate()
>>> print(stdout)
Certes, cela ne fonctionne que parce que je ssh-agent
en cours d'exécution préchargée avec une clé privée que l'hôte distant sait.
child = pexpect.spawn("ssh user@remote_computer ps -ef")
print "connecting..."
i = child.expect(['user@remote_computer\'s password:'])
child.sendline(user_password)
i = child.expect([' .*']) #or use i = child.expect([pexpect.EOF])
if i == 0:
print child.after # uncomment when using [' .*'] pattern
#print child.before # uncomment when using EOF pattern
else:
print "Unable to capture output"
Hope this help..
Essayez d'envoyer
p.sendline("ps -ef\n")
IIRC, le texte que vous envoyez est interprété textuellement, que l'autre ordinateur attend probablement pour vous de compléter la commande.