Netmiko: AttributeError: объект 'NoneType' не имеет атрибута 'recv_ready' - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь подключиться к маршрутизатору Cisco, чтобы получить некоторую информацию, и я получаю следующую ошибку при запуске моего кода:

Traceback (последний вызов был последним): файл "./cisco_auto_back_up_v4.py"строка 72, в файле redispatch (net_connect, device_type = target_device ['device_type']) "/home/ipautowppprod/.pyenv/versions/3.6.5/lib/python3.6/site-packages/netmiko/ssh_dispatcher.py", строка 208, в файле redispatch obj.session_preroduction () "/home/ipautowppprod/.pyenv/versions/3.6.5/lib/python3.6/site-packages/netmiko/cisco/cisco_ios.py", строка 16, вСеанс_препарата 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= файл self.read_channel () "/home/ipautowppprod/.pyenv/versions/3.6.5/lib/python3.6/site-packages/netmiko/base_connection.py ", строка 395, в файле read_channel output = self._read_channel ()" /home/ipautowppprod/.pyenv/versions/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 Ответ

0 голосов
/ 26 октября 2018

Возможно, вы захотите выполнить пошаговое выполнение кода с помощью отладчика, но при обращении к вызову redispatch похоже, что ваш объект net_connect больше не подключен (т. Е. Для net_connect.remote_conn установлено значение None).

Это заставляет меня думать, что возможно было вызвано disnect () в предложении elif или else.Вам, вероятно, следует вызвать исключение в этих случаях (или sys.exit ()), поскольку ваша программа не сможет продолжить работу, если произойдет что-либо из этого.

...