2015-11-30 4 views
0

Я пытаюсь подключиться к удаленному устройству с другого удаленного устройства, выполняя вложенную telnet с помощью telnetlib. Хотя я могу легко общаться с первым устройством, я не могу получить вывод со второго устройства. Ниже мой код, я делаю это правильно?Telnet изнутри сеанса telnet (Python)

import telnetlib 

HOST = "firstDevice" 
user = "lab" 
password = "lab" 

tn = telnetlib.Telnet(HOST) 

tn.read_until("Username: ") 
tn.write(user + "\n") 
if password: 
    tn.read_until("Password: ") 
    tn.write(password + "\n") 

#Nested telnet 
tn2 = telnetlib.Telnet("secondDevice") 
tn2.read_until("#") 
tn2.write("sh clock\n") 

#Close tn2 
tn2.write("exit\n") 
print tn2.read_all() 

#Close tn 
tn.write("exit\n") 
print tn.read_all() 

Edit 1

import telnetlib 

HOST = "firstDevice" 
user = "lab" 
password = "lab" 

tn = telnetlib.Telnet(HOST) 

tn.read_until("Username: ") 
tn.write(user + "\n") 
if password: 
    tn.read_until("Password: ") 
    tn.write(password + "\n") 

#Nested telnet 
tn.write("telnet secondDevice\n") 
tn.write("sh clock\n") 

#Close nested session 
tn.write("exit\n") 

#Close tn 
tn.write("exit\n") 
print tn.read_all() 
+0

Интересно. Выполняли ли вы вручную выполнение точной последовательности команд, которые вы пытаетесь автоматизировать здесь? –

+0

Кроме того, ваша вторая версия отсутствует 'tn2.read_until (" # ")' –

ответ

0

Вы не делаете вложенное соединение в вашем коде. Вы просто подключаетесь к двум различным компьютерам с локального хоста, но, видимо, вы не можете подключиться ко второму. Чтобы сделать вложенный Telnet на второй хост, вы должны сказать первый в телнет ко второму: заменить tn2 = telnetlib.Telnet("secondDevice") с

tn.write("telnet secondDevice\n") 

Поскольку у вас есть вложенное соединение, все ваши локальное должны увидеть tn. Вы можете полностью избавиться от объекта tn2. Все взаимодействие со вторым устройством будет выполнено путем отправки строк на первое устройство, которое находится в сеансе, подключенном ко второму устройству.

+0

Спасибо! Я попробовал это, за которым следуют две строки выхода, но сеанс становится невосприимчивым и не выходит из сеанса, когда я пишу строку telnet. Я что-то упускаю? – sg491

+0

Правильно ли вы обрабатываете логин для вложенного сеанса? –

+0

Вложенная сессия не требует учетных данных для входа. Я обновил код в вопросе в соответствии с ответом. – sg491

Смежные вопросы