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编程argparse入门浅析
Feb 07 Python
20个常用Python运维库和模块
Feb 12 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
Python实现连接MySql数据库及增删改查操作详解
Apr 16 Python
python面向对象法实现图书管理系统
Apr 19 Python
Django框架基础模板标签与filter使用方法详解
Jul 23 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
解决keras使用cov1D函数的输入问题
Jun 29 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
ThinkPHP中order()使用方法详解
2016/04/19 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
介绍Python的@property装饰器的用法
2015/04/28 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
Python编码爬坑指南(必看)
2016/06/10 Python
python批量爬取下载抖音视频
2019/06/17 Python
python使用minimax算法实现五子棋
2019/07/29 Python
python中get和post有什么区别
2020/06/19 Python
欧洲当代手工玻璃和瓷器的领先品牌:LSA International
2018/06/03 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
公路绿化方案
2014/05/12 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
捐助倡议书
2015/01/19 职场文书
行政答辩状范文
2015/05/21 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server