Oct-16-2018, 11:11 AM
Hi
I am using Pexpect module to make SSH connection but it is falling into Traceback and exits.
Any idea how to fix it .
I have tried multiple post that already exist in StackOverflow and other
forums but end up with no luck.
Traceback:
I am using Pexpect module to make SSH connection but it is falling into Traceback and exits.
Any idea how to fix it .
I have tried multiple post that already exist in StackOverflow and other
forums but end up with no luck.
Traceback:
<class 'pexpect.TIMEOUT'>
Traceback (most recent call last):
File "nirmal.hostlist.py", line 610, in <module>
main()
File "nirmal.hostlist.py", line 581, in main
dataGrabber(ls5,ls5_leafs,username,password,enable_pass,ls5_cat_leafs,no_cat,no_l3_fw)
File "nirmal.hostlist.py", line 428, in dataGrabber
macs = macGrabber(child,switch)
File "nirmal.hostlist.py", line 32, in macGrabber
child.expect('.#')
File "/usr/lib/python2.6/site-packages/pexpect.py", line 1311, in expect
return self.expect_list(compiled_pattern_list, timeout, searchwindowsize)
File "/usr/lib/python2.6/site-packages/pexpect.py", line 1325, in expect_list
return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize)
File "/usr/lib/python2.6/site-packages/pexpect.py", line 1409, in expect_loop
raise TIMEOUT (str(e) + '\n' + str(self))
pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().
<pexpect.spawn object at 0xc6af90>
version: 2.3 ($Revision: 399 $)
command: /usr/bin/ssh
args: ['/usr/bin/ssh', 'ng044806@ls5mm33-ci-red']
searcher: searcher_re:
0: re.compile(".#")
buffer (last 100 chars):
before (last 100 chars):
after: <class 'pexpect.TIMEOUT'>
match: None
match_index: None
exitstatus: None
flag_eof: False
pid: 56774
child_fd: 3
closed: False
timeout: 30
delimiter: <class 'pexpect.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1My code:def ssh(hostname,username = 'nadda',password = 'nadda',enable_pass='nadda',cat = False):
hostname = hostname.lower()
pass_prompt = re.compile('.*assword:')
need_key = re.compile('\s.*Are you sure you want to continue connecting \(yes\/no\)\?.',re.DOTALL)
denied = re.compile('Permission denied, please try again\.')
refused = re.compile('Connection refused by remote host')
reset = re.compile('Connection reset by peer')
count = 0
if username is 'nadda' and password is 'nadda':
username = raw_input('login as: ')
password = getpass.getpass('Password:')
print "connecting to " + hostname
if cat is True:
print ('ssh -t root@mgmtsrver "ssh %s@%s"' % (username,hostname))
child = pexpect.spawn('ssh -t root@mgmtsrver "ssh %s@%s"' % (username,hostname))
#ssh -t root@mgmtsrver "ssh bs04628@fs-it-sw-blue"
else:
child = pexpect.spawn('ssh ' + username + '@' + hostname)
print 'connected to ' + hostname
i = child.expect([need_key,'.*>',pass_prompt,pexpect.TIMEOUT,denied,refused,reset])
if i==0:
child.sendline('yes')
print 'adding ssh key'
child.expect(pass_prompt)
else:
print 'not adding ssh key'
if i == 1 or cat is True:
child.sendline(password)
child.expect('.*>')
child = enable(child,enable_pass)
elif i == 2:
if '-fw-' in hostname:
child.sendline(enable_pass)
child.expect('.*>')
child = enable(child,enable_pass)
else:
child.sendline(password)
child.sendline('term length 0')
child.expect('.*#')
elif i == 3:
print 'SSH TIMED OUT ON ' + hostname
exit()
elif i == 4:
print 'PERMISSION DENIED ON %s. Try re-running script with proper creds' % hostname
child.close()
exit()
elif (i == 5 or i == 6) and count == 0:
print 'CONNECTION REFUSED ON %s' % hostname
print 'Will try to reconnect once in 5 seconds...'
time.sleep(5)
while count < 1:
ssh(hostname,username,password,enable_pass)
count += 1
elif (i == 5 or i == 6) and count > 0:
print 'Sorry, %s refused your connection more than once. ' \
'You\'ll have to re-run this script for %s' % (hostname, hostname[:3])
exit()
print '\n'
return child,username,password
