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+PIL实现支付宝AR红包
Feb 09 Python
python实现括号匹配的思路详解
Aug 23 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 Python
python 对多个csv文件分别进行处理的方法
Jan 07 Python
Dlib+OpenCV深度学习人脸识别的方法示例
May 14 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
Python标准库itertools的使用方法
Jan 17 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
django 模型字段设置默认值代码
Jul 15 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
PHP中的串行化变量和序列化对象
2006/09/05 PHP
php查看session内容的函数
2008/08/27 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
JQuery防止退格键网页后退的实现代码
2012/03/23 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
js实现Tab选项卡切换效果
2020/07/17 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
了解Javascript中函数作为对象的魅力
2019/06/19 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
Python常用的日期时间处理方法示例
2015/02/08 Python
Python中property属性实例解析
2018/02/10 Python
详解python对象之间的交互
2020/09/29 Python
python 数据类型强制转换的总结
2021/01/25 Python
高一生物教学反思
2014/01/17 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
自荐信的基本格式
2014/02/22 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
Mysql数据库命令大全
2021/05/26 MySQL
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis