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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top