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 实时遍历日志文件
Apr 12 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
python matplotlib坐标轴设置的方法
Dec 05 Python
Python实现的多项式拟合功能示例【基于matplotlib】
May 15 Python
python操作excel文件并输出txt文件的实例
Jul 10 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
python读写csv文件方法详细总结
Jul 05 Python
在ipython notebook中使用argparse方式
Apr 20 Python
Python自动发送和收取邮件的方法
Aug 12 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
Nov 17 Python
手把手教你实现PyTorch的MNIST数据集
Jun 28 Python
pandas中pd.groupby()的用法详解
Jun 16 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生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
python线程池threadpool使用篇
2018/04/27 Python
transform python环境快速配置方法
2018/09/27 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
小学生安全演讲稿
2014/04/25 职场文书
员工生日会策划方案
2014/06/14 职场文书
党员民主评议自我评价
2014/10/20 职场文书
常用的Python代码调试工具总结
2021/06/23 Python