微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Telnet 设备自动化

如何解决Telnet 设备自动化

我尝试使用 telnet 协议通过 python 连接到设备以执行一些自动化(例如某些旧的 Cisco 路由器), 为此,我正在使用 napalm 库(基于 napalm 库,后者基于 telnetlib 库)

问题是当我直接使用 telnetlib 库时它工作正常,但是当我使用 napalm 或 Netmiko 它给出了这个错误获取 Telnet 登录失败。

有人遇到过这种情况吗?

PS:我尝试了一些在互联网上找到的解决方案,但没有任何效果

提前致谢。

代码有效(telnetlib 库):

import telnetlib
import time
from pprint import pprint


def to_bytes(line):
    return f"{line}\n".encode("utf-8")


def send_show_command(ip,username,password,enable,commands):
    with telnetlib.Telnet(ip) as telnet:
        telnet.read_until(b"Username")
        telnet.write(to_bytes(username))
        telnet.read_until(b"Password")
        telnet.write(to_bytes(password))
        index,m,output = telnet.expect([b">",b"#"])
        if index == 0:
            telnet.write(b"enable\n")
            telnet.read_until(b"Password")
            telnet.write(to_bytes(enable))
            telnet.read_until(b"#",timeout=5)
        telnet.write(b"terminal length 0\n")
        telnet.read_until(b"#",timeout=5)
        time.sleep(3)
        telnet.read_very_eager()

        result = {}
        for command in commands:
            telnet.write(to_bytes(command))
            output = telnet.read_until(b"#",timeout=5).decode("utf-8")
            result[command] = output.replace("\r\n","\n")
        return result


if __name__ == "__main__":
    devices = ["1.1.1.1"]
    commands = ["sh ip int br"]
    for ip in devices:
        result = send_show_command(ip,"username","password","",commands)
        pprint(result,width=120)

代码返回登录错误(凝固汽油弹库):

from napalm import get_network_driver
from pprint import pprint
  
driver = get_network_driver('ios')
conn_method = {'port': 23,'transport': 'telnet','global_delay_factor': 2,'secret': ''}
host = '1.1.1.1'
user = 'username'
passwd = 'password'
  

with driver(hostname=host,username=user,password=passwd,optional_args=conn_method ) as device:
    print('Getting facts')
    pprint(device.get_facts())

代码返回登录错误(netmiko 库):

import os
from netmiko import ConnectHandler

switch = {
    'device_type': 'cisco_ios_telnet','ip': '1.1.1.1',"username": "username","password": "password","timeout": 15

}

net_connect = ConnectHandler(**switch)
print(net_connect)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。