Python用SSH连接到网络设备


Posted in Python onFebruary 18, 2021

0. 前言

自上一篇文章《用python怎么telnet到网络设备》,简单使用了telnetlib库给大家演示了下,但是,现实环境中仍不建议去使用telnet。
SSH(Secure Shell)协议也是属于TCP/IP协议族里的一种,端口号22,可以代替telnet来远程管理的一种方法。
SSH提供了双向认证、数据加密等方法保证数据的安全性,推荐使用SSHv2版本

1. 测试环境及关键代码解释

1.1 简单测试环境

  • 使用python3环境
  • 使用第三方Netmiko模块(基于Paramiko库进行改版)
  • 简单的实验环境

Python用SSH连接到网络设备

1.2 关键代码

  • import xx:导入模块
  • class xx:定义类
  • def xx: 定义函数
  • try-except :处理可能引发的异常
  • ssh.enable():进入enable模式
  • ssh.find_prompt():返回当前提示符
  • ssh.send_command():发送查询命令并返回结果
  • ssh.send_config_set():发送配置命令到目标设备
  • ssh.disconnect():关闭连接

Tips: import ConnectHandler和import Netmiko是一样的效果的哈。

2. 完整代码

'''
欢迎关注微信公众号:'diandijishu'
 此平台是网路工程师个人日常技术、项目案例经验分享,
 为巩固及提升技术能力乃至共享所学所知技术,
 也欢迎各位工程师一起分享、一起成长。
'''

#!/usr/bin/env python
#coding:utf-8

from netmiko import ConnectHandler
from netmiko.ssh_exception import NetMikoTimeoutException
from netmiko.ssh_exception import NetMikoAuthenticationException
from datetime import datetime
import time
import logging
from my_devices import device_list as devices

'定义类'
class SSH_Client():
 '定义login_host函数,用于登陆设备'
 def login_host(self , a_device):
  try:
   self.ssh = ConnectHandler(**a_device)
   self.ssh.enable()
   reply = self.ssh.find_prompt()
   print('>' * 10 + '成功登陆结果如下:' + '>' * 10 + '\n' + reply)
   return True
  except ValueError:
   logging.warning(a_device['host'] + ' Secret 密码错误')
  except NetMikoTimeoutException:
   logging.warning(a_device['host'] + ' 连接不上设备,请检查网络是否正常通信')
  except NetMikoAuthenticationException:
   logging.warning(a_device['host'] + ' 登陆失败,用户名或密码错误')

 '定义do_cmd函数,用于执行命令'
 def do_cmd(self,cmds):
  '读取文件,for语句循环执行命令'
  with open(cmds) as cmd_obj:
   for cmd in cmd_obj:
    reply = self.ssh.send_command(cmd)
    time.sleep(2)
    logging.warning('>' * 10 + cmd.rstrip() + ' 命令执行结果如下:' + '>' * 10 + '\n' + reply)
 '定义logout_host函数,关闭程序'
 def logout_host(self):
  self.ssh.disconnect()

if __name__ == '__main__':
 cmds = 'cmd.txt' # 存放执行命令文件,相对路径
 ssh_client = SSH_Client()
 start_time = datetime.now()
 for a_device in devices:
  '如果登录结果为True,则执行命令,然后退出'
  if ssh_client.login_host(a_device):
   ssh_client.do_cmd(cmds)
   ssh_client.logout_host()
   time.sleep(2)
 stop_time = datetime.now()
 print('总花费时长:{0}\n'.format(stop_time - start_time))

3. 运行效果

Python用SSH连接到网络设备

4. 报错效果

4.1 远程连接不上

Python用SSH连接到网络设备

4.2 用户名和密码错误

Python用SSH连接到网络设备

5. 碎碎语

结合两篇文章,想必大家都知道如何用python使用自带库或第三方库去telnet或ssh网络设备,然而大家可能就会问,如果设备包含多厂商、网络设备telnet和ssh混杂、众多网络设备,那代码又如何去优化呢?的确,要解决一系列问题,咱们得一个一个来哈,也顺便给入门的小伙伴慢慢熟悉下,后面的文章我给大家讲解如何使用多进程和多线程进行优化、完整版网络巡检。
本人代码功夫不深,如有缺陷望指教,多谢。

以上就是Python用SSH连接到网络设备的详细内容,更多关于python SSH连接到网络设备的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python继承和抽象类的实现方法
Jan 14 Python
python使用pil生成图片验证码的方法
May 08 Python
Python3读取zip文件信息的方法
May 22 Python
简单实现python收发邮件功能
Jan 05 Python
Python求出0~100以内的所有素数
Jan 23 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
python 生成器需注意的小问题
Sep 29 Python
Django框架请求生命周期实现原理
Nov 13 Python
在pycharm中无法import所安装的库解决方案
May 31 Python
python 实现IP子网计算
Feb 18 #Python
详解python3 GUI刷屏器(附源码)
Feb 18 #Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 18 #Python
Python如何telnet到网络设备
Feb 18 #Python
Python运算符+与+=的方法实例
Feb 18 #Python
python 获取计算机的网卡信息
Feb 18 #Python
python中time tzset()函数实例用法
Feb 18 #Python
You might like
在php中取得image按钮传递的name值
2006/10/09 PHP
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
PHP设计模式之装饰者模式代码实例
2015/05/11 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
jQuery实现垂直半透明手风琴特效代码分享
2015/08/21 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
js里面的变量范围分享
2020/07/18 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
python3实现随机数
2018/06/25 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
Python 串口读写的实现方法
2019/06/12 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
网络方面基础面试题
2012/11/16 面试题
店长岗位的工作内容
2013/11/12 职场文书
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
出差报告怎么写
2014/11/06 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers