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对象及面向对象技术详解
Jul 19 Python
详解python并发获取snmp信息及性能测试
Mar 27 Python
启动targetcli时遇到错误解决办法
Oct 26 Python
对numpy的array和python中自带的list之间相互转化详解
Apr 13 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
May 31 Python
对pandas里的loc并列条件索引的实例讲解
Nov 15 Python
python3+selenium自动化测试框架详解
Mar 17 Python
pytorch numpy list类型之间的相互转换实例
Aug 18 Python
Python GUI学习之登录系统界面篇
Aug 21 Python
tensorflow 环境变量设置方式
Feb 06 Python
使用遗传算法求二元函数的最小值
Feb 11 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 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程序
2006/10/09 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
解析PHP的session过期设置
2013/06/29 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
python编码最佳实践之总结
2016/02/14 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
python实现dijkstra最短路由算法
2019/01/17 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
培训专员岗位职责
2014/02/26 职场文书
文明和谐家庭事迹材料
2014/05/18 职场文书
后备干部培训方案
2014/05/22 职场文书
内科护士节演讲稿
2014/09/11 职场文书
北京导游词
2015/02/12 职场文书
《假如》教学反思
2016/02/17 职场文书