1

我正在尝试进行自动化部署,该部署将提供给设备的远程配置,但我不知道出了什么问题。

我不是专家,只是一个学习 Python 的初学者。

我的设置。

PythonServer--ssh-> Cisco 控制台服务器--reverse 原则--> New_device(cisco)

我可以成功连接到cisco colse服务器。(简单的部分,我可以使用 device_type 作为'cisco_ios'、'cisco_ios_telnet'、terminal_server'、'generic_terminal_server'进行连接)所有这些都可以工作。

当我尝试反向 telnet 时,我只收到密码提示。

************************************************************************
This is a privately owned computing system.  Access permitted only by
authorized employees.
************************************************************************
Password: 

我无法克服这一点。这是我的代码。我究竟做错了什么?(我认为它与 netmiko 处理连接的方式有关)有人可以帮我解决这个问题。

import time
from netmiko import ConnectHandler, redispatch

conserver_username = 'cisco'
conserver_password = 'cisco'
conserver_ip = '10.88.77.152'

console_server = {
    'host': conserver_ip,
    'username': conserver_username,
    'password': conserver_password,
    'device_type': 'cisco_ios',
    'session_log': 'log.out'
}

net_connect = ConnectHandler(**console_server)

net_connect.send_command('\n', expect_string=r'#')
net_connect.send_command('telnet 10.88.77.152 2004', expect_string=r':')
net_connect.send_command_timing('cisco')
#net_connect.send_command_timing('cisco')
net_connect.send_command_timing('\n')

这用横幅提示我并且没有继续。

我相信该模块会查找用户名,并且由于没有显示用户名,因此不知道如何处理它。

4

2 回答 2

1

可能有2个问题:

  1. 如果设备在登录时不需要密码(密码在 vty 行中配置)。这将是 Cisco ios 上的配置问题
  2. 而不是 send_command 尝试 write_channel 建立连接。您可能想尝试下面的代码,我添加了一些打印来帮助调试。另外,检查您的日志文件:
import time
from netmiko import ConnectHandler, redispatch

conserver_username = 'cisco'
conserver_password = 'cisco'
conserver_ip = '10.88.77.152'

console_server = {
    'host': conserver_ip,
    'username': conserver_username,
    'password': conserver_password,
    'device_type': 'cisco_ios',
    'session_log': 'log.out'
}

new_device_username = 'cisco'
new_device_password = 'cisco'

net_connect = ConnectHandler(**console_server)

#to make sure that you are in logged in to the right device:
output = net_connect.find_prompt()
print(output)
# write channel
net_connect.write_channel('telnet 10.88.77.152 2004')
time.sleep(2) # this is needed for the device to send response. Yoiu may adjust timing depending on your end device
output = net_connect.read_channel()
print(output)

#send username:
net_connect.write_channel(new_device_username)
time.sleep(2)
#send password:
net_connect.write_channel(new_device_password)
time.sleep(2)
output = net_connect.read_channel()
print(output)

#see if you are logged in
net_connect.write_channel('\n')
time.sleep(1)
output = net_connect.read_channel()
print(output)
#redispatch when logged in and use as normal:
redispatch(net_connect, device_type='cisco_ios_telnet')
output = net_connect.find_prompt()
print(output)

注意:有一个重新调度的方法!

你可能想看看这篇关于代理的文章

于 2020-04-13T05:02:08.830 回答
0

你可能想添加

net_connect.write_channel("\r\n")

输入用户名和密码后提供返回/回车键功能。

net_connect.write_channel(new_device_username)
time.sleep(2)
net_connect.write_channel("\r\n")

net_connect.write_channel(new_device_password)
time.sleep(2)
net_connect.write_channel("\r\n")
于 2021-04-03T10:42:15.763 回答