前面两篇文章介绍了Python调用Telnet。今天介绍一下使用SSH自动巡检。
实验目的和前面一致:运行Python脚本,自动SSH连接到网络设备(或者服务器),执行指定的巡检命令,之后将巡检日志保存在和python脚本相同的目录中,该日志的命名形式:设备名+日期+时间.txt。
本次实验使用的是python3,教程适用对象:初学python的网络工程师,Linux运维工程师。
路由器上的配置:
IP地址:192.168.1.200
username ljds password ljds
enable secret ccie
ip domain-name ljds.com
crypto key generate rsa
ip ssh version 2
line vty 0 4
transport input ssh
login local
以上路由器的基础配置,网络工程师应该是能看懂的,Linux运维工程师看不懂也无所谓,你只要知道这是搭建了个SSH服务端就行,等下要SSH连接192.168.1.200。
先手动SSH连接测试:
输入正确的用户名密码即可登录。
接下来安装paramiko,paramiko是第三方库,需要单独安装。(之前使用Telnet时调用的是Python的标准库telnetlib,它无需单独安装,可以直接导入)
安装方法:
C:\Users\LJDS>pip install paramiko
测试下安装是否成功,在Python中导入看看是否报错:
paramiko也安装成功,接下来就是Python代码了:
############################
import paramiko
import time
import re
def SSH_ljds(Host,UserName,PassWord,*cmds):
LogTime = time.strftime('%Y-%m-%d_%H-%M-%S')#缩进4空格
ssh = paramiko.SSHClient()#缩进4空格
ssh.load_system_host_keys()#缩进4空格
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#缩进4空格
ssh.connect(Host,username=UserName,password=PassWord,timeout=5,compress=True)#缩进4空格
channel=ssh.invoke_shell()#缩进4空格
channel.send('enable'.encode() + b'\n')#缩进4空格
channel.send('ccie'.encode() + b'\n')#缩进4空格
channel.send('terminal length 0'.encode() + b'\n')#缩进4空格
for cmd in cmds:#缩进4空格
channel.send(cmd.encode() + b'\n')#缩进8空格
time.sleep(1)#缩进8空格
SSHreply = channel.recv(32768).decode()#缩进4空格
DeviceName = re.search('.*(?=#show run)',SSHreply).group()#缩进4空格
channel.close()#缩进4空格
ssh.close()#缩进4空格
log = open(DeviceName + '-' + LogTime + '.txt','w')#缩进4空格
log.write(SSHreply)#缩进4空格
log.close()#缩进4空格
if __name__ == '__main__':
SSH_ljds('192.168.1.200', 'ljds', 'ljds', 'show run','show ip int b','show log')
############################
很无奈,头条发表出来的文章,排版会被调整,写出的代码缩进都没了,所以上面我标注了缩进,正常情况应该是这样:
现在测试效果,执行SSH_ljds.py文件,会在当前目录生成巡检日志:
已经达到自动巡检的目的,希望对初学python的同学(运维工程师)有所帮助。