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 CGI脚本的教程
Jun 29 Python
在Python的Django框架中使用通用视图的方法
Jul 21 Python
Python使用PIL库实现验证码图片的方法
Mar 11 Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
Python爬虫:通过关键字爬取百度图片
Feb 17 Python
Python paramiko模块的使用示例
Apr 11 Python
对python中词典的values值的修改或新增KEY详解
Jan 20 Python
Django如何开发简单的查询接口详解
May 17 Python
PyCharm第一次安装及使用教程
Jan 08 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
Python Pillow(PIL)库的用法详解
Sep 19 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获取金书网的书名的实现代码
2010/06/11 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
基于jquery的tab切换 js原理
2010/04/01 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
详解redux异步操作实践
2018/08/15 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
极简的Python入门指引
2015/04/01 Python
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
python操作文件的参数整理
2019/06/11 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
python集合能干吗
2020/07/19 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
德国购买健身器材:AsVIVA
2017/08/09 全球购物
酒后驾驶检讨书
2014/01/27 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
珍惜资源的建议书
2014/08/26 职场文书
离婚协议书范文
2015/01/26 职场文书
行政答辩状范文
2015/05/21 职场文书
美元符号 $
2022/02/17 杂记