2010-04-29 10 views
0

J'essaye d'utiliser pexpect pour ssh dans un ordinateur mais je ne veux pas revenir à l'ordinateur d'origine. Le code que j'ai est:Pour arrêter de retourner via SSH en utilisant Pexpect

#!/usr/bin/python2.6 

import pexpect, os 

def ssh(): 

    # Logs into computer through SSH 
    ssh_newkey = 'Are you sure you want to continue connecting' 
    # my ssh command line 
    p=pexpect.spawn('ssh [email protected]') 

    i=p.expect([ssh_newkey,'password:',pexpect.EOF]) 
    p.sendline("password") 
    i=p.expect('-bash-3.2') 

    print os.getcwd() 
ssh() 

Cela me permet de ssh dans l'ordinateur mais quand je lance le os.getcwd() le pexpect m'a retourné à l'ordinateur d'origine. Vous voyez que je veux ssh dans un autre ordinateur et utiliser leur environnement ne pas faire glisser mon environnement en utilisant pexpect. Quelqu'un peut-il suggérer comment obtenir ce travail ou d'une manière alternative.

Merci

Répondre

1

Le processus qui lance ssh ne va jamais quitter l'ordinateur, il fonctionne sur. Lorsque vous ssh dans un autre ordinateur, vous démarrez un nouveau processus il. Ce processus est une chose entièrement distincte, un programme distinct à exécuter. Si vous voulez faire quoi que ce soit sur la machine distante, vous devez soit envoyer les commandes à exécuter via la connexion, soit copier sur le programme que vous voulez exécuter et l'exécuter à distance.

+0

@Thomas Wouters - Connaissez-vous un autre moyen de ssh dans une autre machine et entrez le mot de passe sans utiliser pexpect? Merci – chrissygormley

+0

Je ne sais pas pourquoi vous pensez que vous avez besoin d'une autre façon. Quelle que soit la façon dont vous le faites, vous allez vous retrouver dans la même situation. Mais sûr: paramiko peut vous laisser faire cela aussi. Vous finissez toujours avec des processus distincts; C'est comme ça que ça fonctionne. –

0

votre instance vers l'autre machine est p. p.sendline ce que vous voulez sur l'autre machine et p.expect le résultat. dans le cas décrit

p.sendline("pwd && hostname") 
p.expect("-bash-3.2") # although its better to set the prompt yourself so that this can be ported to any machine 
response = p.before 
print "received response [[" + response + "]]" 

Essayez cela. Essayez aussi le module pxssh pour utiliser ssh avec python. Ce module utilise pexpect et a toutes les méthodes pour faire exactement ce que vous voulez ici