python netmiko错误-在3个路由器中配置环回的代码

问题描述

我正在尝试通过 python 自动化分别在 Router1/2/3 中配置 loopback1/2/3,下面是我的代码

from netmiko import ConnectHandler

i = 0
for n in range (177,180):
    i += 1
    HOST = "192.168.122." + str(n)
    ROUTER = {
    'device_type': 'cisco_ios','ip': HOST,'username': 'cisco','password': 'cisco',}
    device = [ROUTER]
    for devices in device:
        net_connect = ConnectHandler(**devices)
        output = net_connect.send_config_set("int lo" + str(i) + "\n" + "ip address " + str(i) + "." + str(i) + "." + str(i) + "." + str(i) + " 255.255.255.255")
    print (i)

运行代码时出现错误,请参见下文。

root@NetworkAutomation-1:~# python3 netmikoconfigmultiplerouters-2.py
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/paramiko/channel.py",line 699,in recv
    out = self.in_buffer.read(nbytes,self.timeout)
  File "/usr/local/lib/python3.8/dist-packages/paramiko/buffered_pipe.py",line 164,in read
    raise PipeTimeout()
paramiko.buffered_pipe.PipeTimeout

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/netmiko/base_connection.py",line 569,in _read_channel_expect
    new_data = self.remote_conn.recv(MAX_BUFFER)
  File "/usr/local/lib/python3.8/dist-packages/paramiko/channel.py",line 701,in recv
    raise socket.timeout()
socket.timeout

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "netmikoconfigmultiplerouters-2.py",line 18,in <module>
    output = net_connect.send_config_set("int lo" + str(i) + "\n" + "ip address " + str(i) + "." + str(i) + "." + str(i) + "." + str(i) + " 255.255.255.255")
  File "/usr/local/lib/python3.8/dist-packages/netmiko/base_connection.py",line 1875,in send_config_set
    new_output = self.read_until_pattern(pattern=re.escape(cmd.strip()))
  File "/usr/local/lib/python3.8/dist-packages/netmiko/base_connection.py",line 651,in read_until_pattern
    return self._read_channel_expect(*args,**kwargs)
  File "/usr/local/lib/python3.8/dist-packages/netmiko/base_connection.py",line 579,in _read_channel_expect
    raise NetmikoTimeoutException(
netmiko.ssh_exception.NetmikoTimeoutException: Timed-out reading channel,data not available.
root@NetworkAutomation-1:~#

有人可以帮我吗?

提前致谢, 长沙树。

解决方法

Netmiko 的 send_config_set 接受命令列表,因此我不会尝试构建多行字符串。相反,我会做类似的事情:

# Do you really just want it to be i.i.i.i for the IP?
cmd_list = [
    f"interface Loopback{i}",f"ip address {i}.{i}.{i}.{i} 255.255.255.255"
]
output = net_connect.send_config_set(cmd_list)