python3|python3 paramiko 巡检网络设备
用paramiko做网络设备巡检,发现大坑,就是show run这种看配置有多页存在的没法显示第二页,没找到paramiko翻页的地方,添加多个空格也不是很好使。
文章图片
文章图片
避开这个坑,自动登入搞定了后面命令怎么传都是小事了,传参参考第二个脚本吧。
cisco的全页打印显示配置信息的命令:terminal length 0
show run华为和H3C的全页打印显示配置信息的命令:user-interface vty 0 4
screen-length 0
display current-configuration
直接在命令里面传入全局模式密码。
#!/usr/bin/python3
# -*- coding:utf-8 -*-import paramiko
import timedef main(host, username, password, commands):
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, username=username, password=password,
port=22, allow_agent=False, look_for_keys=False)
channel = client.invoke_shell()# 请求交互式Shell会话
for command in commands:
channel.send(command + "\n")# 发送指令
while not channel.recv_ready():# 等待数据到达
time.sleep(1)
output = channel.recv(40960)# 从通道接收数据 nbytes(int)–读取的最大字节数
print(output.decode())
client.close()if __name__ == '__main__':
host = '192.168.208.131'
username = 'root'
password = 'root.123'
commands = ['enable', 'cisco', 'terminal length 0','show run', 'show ip int br', 'exit']#全页打印terminal length 0
main(host, username, password, commands)
commands = ['enable', 'cisco', ,'show run', ' ',' ', 'exit']
多添加几个空格还是没有解决翻页的问题
文章图片
最早用pexpect写的,可以避开这个坑,就是灵活性太低。遇到ssh公钥改变的就连不上了,每个厂家都要重写。。。。。
#!/usr/bin/python
#-*- coding:utf-8 -*-import pexpect
import sys
import timedef main(host,username,password,enable,commands):
# host = '192.168.208.131'
# username = 'root'
# password = 'root.123'
# enable = 'cisco'
# commands = [ show processes memory ]
commands = str(commands).split(';
')
child = pexpect.spawnu('ssh %s@%s' % (username,host))
child.logfile = sys.stdout
login = child.expect(['yes/no', '[P|p]assword:', pexpect.EOF, pexpect.TIMEOUT])
if login == 0:
child.sendline('yes')
child.expect('[P|p]assword:')
child.sendline('%s' % password)
elif login == 1:
child.sendline('%s' % password)
child.expect('\>')
child.sendline('enable')
child.expect('[P|p]assword:')
child.sendline('%s' % enable)
for command in commands:
child.expect('\#')
child.sendline('%s' % command)
index = child.expect(['--More--','\#'])
if index == 0:
for i in range(5):
child.send(' ')
time.sleep(1)
#child.sendline(' ')
child.sendline('')
#time.sleep(2)
child.expect('\#')
child.sendline('exit')
child.close()if __name__ == '__main__':
host = sys.argv[1]
username = sys.argv[2]
password = sys.argv[3]
enable = sys.argv[4]
commands = sys.argv[5]
main(host,username,password,enable,commands)
测试用的是eve和GNS3 ,网络模拟器我玩的贼6.。。。。
pexpect 又开始踩坑,模拟器每次开起来公钥就变了,就登不上了,生产环境极少概率会这样旧设备替换啥的,想想还是放弃这个,后面不知道会遇到多少坑。
文章图片
解决办法 ,清理下公钥
[root@localhost ~]# echo > .ssh/known_hosts
文章图片
这边for循环打几个空格进去,匹配到--More--就敲起来,可以解决,就是灵活性太低,还是用全页显示比较好
【python3|python3 paramiko 巡检网络设备】
推荐阅读
- Python3|Python3 MySQL 数据库连接
- win10环境|win10环境 python3.6安装pycrypto-2.6.1的问题
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- python3|python3 模块 包
- Python3.x(Socket网络编程)
- 树莓派|树莓派 | 04 安装基于python3.5的tensorflow,解决python版本不匹配问题
- ubuntu下安装python3.6及以上版本出现pip3报错等问题
- python实现gui编程_怎样用Python3实现GUI编程()
- Python3.7操作MySQL8.0.15数据库
- pip|pip install pycryptodome python3 AES