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实现封装得到virustotal扫描结果
Oct 05 Python
python多重继承实例
Oct 11 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
Python建立Map写Excel表实例解析
Jan 17 Python
使用python对文件中的单词进行提取的方法示例
Dec 21 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
python入门之基础语法学习笔记
Feb 08 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
Django ORM实现按天获取数据去重求和例子
May 18 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
Jul 05 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
一个SQL管理员的web接口
2006/10/09 PHP
php+mysql写的简单留言本实例代码
2008/07/25 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
php常用数学函数汇总
2014/11/21 PHP
合格的PHP程序员必备技能
2015/11/13 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
JavaScript中令你抓狂的魔术变量
2006/11/30 Javascript
推荐dojo学习笔记
2007/03/24 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
深入浅析python继承问题
2016/05/29 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
python数据归一化及三种方法详解
2019/08/06 Python
python super用法及原理详解
2020/01/20 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
美术专业学生个人自我评价
2013/09/19 职场文书
大学社团活动总结
2014/04/26 职场文书
预备党员综合考察材料
2014/05/31 职场文书
社区戒毒工作方案
2014/06/04 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
天鹅湖观后感
2015/06/09 职场文书
Java设计模式之享元模式示例详解
2022/03/03 Java/Android