问题描述
我正在尝试开发一个 python 脚本,该脚本使用 netmiko(ConnectHandler()) 通过另一个路由器连接到 cisco 路由器。 ssh 到 R1,然后从 R1 SSH 到 R2。
我建立了到 R1 的第一个连接,我使用 Netmiko ssh 到路由器 R2 但我无法建立 cnx。 这是字典的创建
def sh_route(self,alias):
global verif
self.device = self._cache.switch(alias)
device_info = {
'device_type': 'cisco_ios','ip': self.device.hostname,'username': self.device.username,'password': self.device.password,}
使用 ConnectHandler 和创建的字典连接到 R1
#connect to device1 from linux
net_connect = ConnectHandler(**device_info)
ldp= self.get_ldp_neighbors(alias)
for x in ldp.keys():
addr_list = ldp[x]['addresses'] #List of ldp ip adresses
src_ip_addr= ldp[x]['SrcIPaddr'] #source ip addr
使用 write_channel() 函数写入 ssh 'src_ip_addr'(src_ip_addr 是我要 ssh 的地址)
net_connect.write_channel('ssh'+src_ip_addr+'\n')
time.sleep(1)
output = net_connect.read_channel()
使用循环处理上述用户名和密码 密码好像没写,所以cnx失败。
i = 1
while i <= 20:
try:
if 'Username' in output:
net_connect.write_channel(net_connect.username + '\r\n')
time.sleep(1)
output = net_connect.read_channel()
if 'password' in output:
net_connect.write_channel(net_connect.password + '\n')
time.sleep(1)
output = net_connect.read_channel()
i += 1
except EOFError:
pass
print(output=
验证cnx是否已建立
print ("SSH prompt: {}".format(net_connect.find_prompt()))
然后使用分派功能向目标路由器 R2 发送命令
redispatch(net_connect,device_type='cisco_ios')
net_connect.enable()
new_output = net_connect.send_command('show version',use_textfsm=True)
然后我尝试运行命令 sh ip route connected 和 sh route local
version= new_output[0]['rommon']
if version == 'IOS-XE':
new_output = net_connect.send_command('show ip route connected')
return new_output
if version == 'IOS-XR':
new_output = net_connect.send_command('show route local')
return new_output
这是终端的输出
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
ssh 192.168.247.2
Password:
SSH prompt: Password:
这是完整的日志:
这是日志
DEBUG:paramiko.transport:starting thread (client mode): 0x31b464e0 调试:paramiko.transport:本地版本/idstring:SSH-2.0-paramiko_2.7.2 调试:paramiko.transport:远程版本/idstring:SSH-2.0-Cisco-1.25 信息:paramiko.transport:已连接(版本 2.0,客户端 Cisco-1.25) 调试:paramiko.transport:kex 算法:['ecdh-sha2-nistp256','ecdh-sha2-nistp384','ecdh-sha2-nistp521','diffie-hellman-group14-sha1'] 服务器密钥:['rsa -sha2-512'、'rsa-sha2-256'、'ssh-rsa'] 客户端加密:['aes128-gcm'、'aes256-gcm'、'aes128-ctr'、'aes192-ctr'、'aes256 -ctr'] 服务器加密:['aes128-gcm','aes256-gcm','aes128-ctr','aes192-ctr','aes256-ctr'] 客户端 mac:['hmac-sha2-256-etm @openssh.com','[email protected]','hmac-sha2-256','hmac-sha2-512'] 服务器 mac:['hmac-sha2-256-etm@openssh .com','hmac-sha2-512'] 客户端压缩:['none'] 服务器压缩:['none']客户端语言:[''] 服务器语言:[''] kex 跟随?假 DEBUG:paramiko.transport:Kex 同意:ecdh-sha2-nistp256 DEBUG:paramiko.transport:HostKey 同意:ssh-rsa DEBUG:paramiko.transport:Cipher 同意:aes128-ctr DEBUG:paramiko.transport:MAC 同意:hmac-sha2-256 调试:paramiko.transport:压缩同意:无 DEBUG:paramiko.transport:kex 引擎 KexNistp256 指定 hash_algo DEBUG:paramiko.transport:切换到新键... 调试:paramiko.transport:为 Bnet-A101 添加 ssh-rsa 主机密钥:b'a51ea5a576822573a37ce25441bd0241' DEBUG:paramiko.transport:userauth 没问题 INFO:paramiko.transport:身份验证(密码)成功! DEBUG:paramiko.transport:[chan 0] Max packet in: 32768 bytes DEBUG:paramiko.transport:[chan 0] 最大数据包输出:4096 字节 DEBUG:paramiko.transport:Secsh 通道 0 打开。 DEBUG:paramiko.transport:[chan 0] Sesch channel 0 request ok DEBUG:paramiko.transport:[chan 0] Sesch channel 0 request ok DEBUG:netmiko:write_channel: b'终端宽度 511\n' DEBUG:netmiko:Pattern 是:终端宽度 511 DEBUG:netmiko:_read_channel_expect read_data: CCCCCCCC
抄送
| | | BNET-A101 在 BRATISLAVA vLAB | | | |这是一个由 ORANGE BUSInesS SERVICES 管理的私有系统 | | | |访问此设备需要针对 | | | | >> 实验室基础设施 TACACS 服务
DEBUG:netmiko:_read_channel_expect read_data: CCCCCCCC
CCCCCCCCCC 抄送 C ________________________________________________________________ | | |此设备上的活动被记录并可能受到监控 | |________________________________________________________________|
Bnet-A101#终端宽度5
DEBUG:netmiko:_read_channel_expect read_data: 11
DEBUG:netmiko:Pattern found: 终端宽度 511 CCCCCCCC
抄送
| | | BNET-A101 在 BRATISLAVA vLAB | | | |这是一个由 ORANGE BUSInesS SERVICES 管理的私有系统 | | | |访问此设备需要针对 | | | | >> 实验室基础设施 TACACS 服务
Bnet-A101#终端宽度511
DEBUG:netmiko:In disable_paging DEBUG:netmiko:Command: 终端长度 0
DEBUG:netmiko:write_channel: b'终端长度 0\n' DEBUG:netmiko:Pattern 为:终端\长度\0 调试:netmiko:_read_channel_expect read_data:Bnet-A101# 调试:netmiko:_read_channel_expect read_data:终端len 调试:netmiko:_read_channel_expect read_data:gth 0
DEBUG:netmiko:Pattern found: terminal\length\0 Bnet-A101#terminal length 0
DEBUG:netmiko:Bnet-A101#终端长度0
DEBUG:netmiko:Exiting disable_paging 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' DEBUG:netmiko:read_channel: Bnet-A101#
Bnet-A101# Bnet-A101# Bnet-A101# Bnet-A101# Bnet-A101# Bnet-A101#
调试:netmiko:read_channel: DEBUG:netmiko:[find_prompt()]: 提示是 Bnet-A101# DEBUG:netmiko:write_channel: b'ssh 192.168.247.2\n' 调试:netmiko:read_channel:ssh 192.168.247.2
密码:
调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel:
调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' DEBUG:netmiko:read_channel: CCCCAuthentication 失败,请重试!
密码:
调试:netmiko:read_channel: DEBUG:netmiko:[find_prompt()]: prompt is Password: 调试:netmiko:write_channel: b'\n' 调试:netmiko:模式是:Bnet-A101 DEBUG:netmiko:_read_channel_expect read_data: CCCCAuthentication 失败,请重试!
密码:
DEBUG:netmiko:_read_channel_expect read_data: CCCCAuthentication 失败,请重试! 密码:
DEBUG:netmiko:_read_channel_expect read_data:
DEBUG:netmiko:_read_channel_expect read_data:
[与 192.168.247.2 的连接被外部主机关闭] Bnet-A101# Bnet-A101#
DEBUG:netmiko:Pattern found: Bnet-A101 CCCCAuthentication 失败,请重试!
[与 192.168.247.2 的连接被外部主机关闭] Bnet-A101# Bnet-A101#
调试:netmiko:read_channel:
Bnet-A101# Bnet-A101# Bnet-A101# Bnet-A101# Bnet-A101#
DEBUG:netmiko:Clear buffer 检测通道中的数据 调试:netmiko:read_channel: 调试:netmiko:write_channel: b'\n' 调试:netmiko:read_channel:
Bnet-A101#
调试:netmiko:read_channel: DEBUG:netmiko:[find_prompt()]: 提示是 Bnet-A101# 调试:netmiko:read_channel: DEBUG:netmiko:write_channel: b'显示版本\n' DEBUG:netmiko:Pattern 是:show\ version 调试:netmiko:_read_channel_expect read_data:s DEBUG:netmiko:_read_channel_expect read_data: 如何版本
DEBUG:netmiko:Pattern found: show\ version show version
调试:netmiko:read_channel: 调试:netmiko:read_channel: 调试:netmiko:read_channel: 调试:netmiko:read_channel: 调试:netmiko:read_channel: 调试:netmiko:read_channel: 调试:netmiko:read_channel: 调试:netmiko:read_channel: 调试:netmiko:read_channel: 调试:netmiko:read_channel:
在 R1 而不是 R2 下执行的 sh ip route connected 的输出
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)