2017-02-12 2 views
0

J'essaye d'écrire un script où j'ai besoin de ssh serveur de saut multiple pour accéder à un routeur.Manipulation du délai d'attente telnet/connexion refusée dans le routeur python pexpect

par exemple LocalMachine ---- --- ssh server1 --- --- ssh server2 --- telnet/ssh --- routeur

Je ne sais pas quelle est la meilleure façon de le faire, j'ai essayé l'atteindre grâce à pexpect. Mon exigence est quand je telnet du serveur server2 au routeur et il timeout/connexion refusée je veux essayer ssh des suggestions s'il vous plaît?

import time, pexpect 

child = pexpect.spawn('ssh [email protected]') ##########ssh to 1st Jump server 
child.expect('password: ') 
child.sendline('abc') 
child.expect('$') 
child.sendline('ssh [email protected]') ##########ssh to 2nd Jump server 
print child.before 
child.expect('password:') 
child.sendline('xyz') 
child.expect('$') 
print child.before 
host=raw_input("Enter Router name: ")  

try: 
    print "Trying Telnet ", host 
    child.sendline(' telnet ' + host) ### router telnet at this point i want if telnet is timeout/connection refused try ssh 
    print child.before 
except pexpect.TIMEOUT: 
    print child.before 
else: 
    child.expect(':') 
    child.sendline("User") 
    child.expect(":") 
    child.sendline('passwprd') 
    child.expect('#') 
    child.sendline("\n") 
    child.expect("#") 
finally: 
    print "Trying SSH ", host 
    child.sendline(' ssh -l User ' + host) 
    print child.before 
    child.expect(":") 
    child.sendline('password') 
    child.expect('#') 
    child.sendline("\n") 

print child.before 
child.interact() 

Répondre

1

L'exception pexpect.TIMEOUT est déclenchée par l'instance de programme exécutée sur votre machine. Il ne sait pas s'il existe un délai d'attente pour l'instance telnet exécutée sur l'ordinateur distant auquel vous avez accédé. La seule façon que vous pouvez voir si la connexion telnet a un timeout ou une erreur similaire, à savoir. connexion refusée, est de regarder la sortie du processus à travers pexpect. Si vous regardez le documentation pour expect il est dit que vous pouvez donner une liste de conditions - cela pourrait être une façon de faire.

Par exemple:

index = p.expect (['timeout', 'connection refused]) # Fill in correct words :) 
+0

essayé d'utiliser ci-dessous, mais la valeur si i est toujours « $ » ..Qu'est est l'erreur? I = child.expect (["Nom d'utilisateur:", "$", "Etes-vous sûr de vouloir continuer à vous connecter (oui/non)?", "Mot de passe:", ">"]) –