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 相关文章推荐
phpsir 开发 一个检测百度关键字网站排名的python 程序
Sep 17 Python
收集的几个Python小技巧分享
Nov 22 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
详解Python学习之安装pandas
Apr 16 Python
Django如何实现上传图片功能
Aug 16 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
python 读取、写入txt文件的示例
Sep 27 Python
python中绕过反爬虫的方法总结
Nov 25 Python
Pytorch 使用tensor特定条件判断索引
Apr 08 Python
python 解决微分方程的操作(数值解法)
May 26 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
基于PHP实现用户在线状态检测
2020/11/10 PHP
xmlHTTP实例
2006/10/24 Javascript
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
range 标准化之获取
2011/08/28 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
JS实现百度搜索框关键字推荐
2020/02/17 Javascript
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
Python 的类、继承和多态详解
2017/07/16 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Django web框架使用url path name详解
2019/04/29 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
办理信用卡工作证明
2014/01/11 职场文书
党员个人公开承诺书
2014/08/29 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
高三数学教学反思
2016/02/18 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
Rust中的Struct使用示例详解
2022/08/14 Javascript