Netmiko: AttributeError: у объекта 'NoneType' нет атрибута 'recv_ready'
Я пытаюсь подключиться к маршрутизатору Cisco, чтобы получить некоторую информацию, и я получаю следующую ошибку при запуске моего кода:
Трассировка (последний вызов был последним): Файл "./cisco_auto_back_up_v4.py", строка 72, в повторной отправке (net_connect, device_type=target_device['device_type']) Файл "/home/ipautowppprod/.pyenv/versions/3py.5// lib/python3.6/site-packages/netmiko/ssh_dispatcher.py", строка 208, в файле redispatch obj.session_preparation()"/home/ipautowppprod/.pyenv/versions/3.6.5/lib/python3.6/site-packages/netmiko/cisco/cisco_ios.py", строка 16, в файле session_preparation self._test_channel_read(pattern=r'[>#]'), файл"/home/ipautowppprod/.pyenv/versions/3.6.5/lib/python3.6/site-packages/netmiko/base_connection.py", строка 791, в _test_channel_read new_data += файл self._read_channel_timing()" /home/ipautowppprod/.pyenv/versions/3.6.5/lib/python3.6/site -packages / netmiko / base_connection.py ", строка 494, в файле _read_channel_timing new_data = self.read_channel()" /home/ipautowppprod/.pyenv/versions/3.6.5/lib/python3.6/site-packages/netmiko/ base_connection.py ", строка 395, в файле read_channel = файл self._read_channel()" / home / ipautowppprod /.pyenv / version / 3.6.5 / lib / python3.6 / site-packages / netmiko / base_connection.py ", строка 373, в _read_channel, если self.remote_conn.recv_ready(): AttributeError: объект NoneType не имеет атрибут recv_ready
Вот мой код:
#!/home/ipautowppprod/.pyenv/shims/python
# cisco_auto_back_up_v4
from netmiko import ConnectHandler, redispatch
from netmiko import NetMikoAuthenticationException, NetMikoTimeoutException
import datetime
import sys
import time
now = datetime.datetime.now()
time_now = now.strftime("%Y-%m-%d_%H:%M:%S")
target_info = sys.argv[1].split(',')
ipmon_info = sys.argv[2].split(',')
target_info = [x.strip() for x in target_info]
ipmon_info = [x.strip() for x in ipmon_info]
target_device = {
'device_type': 'cisco_ios',
'ip': target_info[0],
"host": target_info[1],
'username': target_info[2],
'password': target_info[3],
'secret': target_info[4]
}
ipmon = {
'device_type': 'linux',
'ip': ipmon_info[0],
'username': ipmon_info[1],
'password': ipmon_info[2]
}
try:
print("Attempting to Connect...")
# Connect to ipmon
net_connect = ConnectHandler(**ipmon)
print(net_connect.find_prompt())
net_connect.write_channel("ssh {}@{}\n".format(target_device["username"],
target_device["ip"]))
time.sleep(1)
output = net_connect.read_channel()
print(output)
if "RSA" in output:
net_connect.write_channel("yes\n")
time.sleep(1)
output = net_connect.read_channel()
print(output)
if "user" in output:
net_connect.write_channel(target_device["username"] + "\n")
time.sleep(1)
output = net_connect.read_channel()
if "password" in output:
net_connect.write_channel(target_device["password"] + "\n")
time.sleep(5)
output = net_connect.read_channel()
if "password" in output:
print("Wrong credentials.")
sys.exit(1)
elif "refused" in output:
net_connect.disconnect()
print("Connection Refused")
else:
net_connect.disconnect()
# Connect to device
redispatch(net_connect, device_type=target_device['device_type'])
CMD = net_connect.send_command_timing('show running-config')
# Converts CMD output to a string
cmd_output = str(CMD.stdout)
except NetMikoAuthenticationException as autom_err:
print(autom_err)
sys.exit(1)
except NetMikoTimeoutException as timeout_err:
print(timeout_err)
sys.exit(1)
Пожалуйста, порекомендуйте.
заранее спасибо
1 ответ
Возможно, вы захотите выполнить выполнение кода с помощью отладчика, но при вызове redispatch похоже, что ваш объект net_connect больше не подключен (т. Е. Для net_connect.remote_conn установлено значение None).
Это заставляет меня думать, что disnect() в предложении elif или else возможно было вызвано. Вам, вероятно, следует вызвать исключение в этих случаях (или sys.exit()), поскольку ваша программа не сможет продолжить работу, если произойдет что-либо из этого.