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显示进度条的方法
Sep 20 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
kaggle+mnist实现手写字体识别
Jul 26 Python
Python中关键字global和nonlocal的区别详解
Sep 03 Python
python3使用QQ邮箱发送邮件
May 20 Python
Python实现制度转换(货币,温度,长度)
Jul 14 Python
使用python实现对元素的长截图功能
Nov 14 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
Jul 20 Python
Python selenium实现断言3种方法解析
Sep 08 Python
Django 实现图片上传和下载功能
Dec 31 Python
深度学习tensorflow基础mnist
Apr 14 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中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
jQuery 工具函数学习资料
2010/04/29 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
js原生实现FastClick事件的实例
2016/11/20 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
详解python的几种标准输出重定向方式
2016/08/15 Python
Python统计单词出现的次数
2018/04/04 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
python八皇后问题的解决方法
2018/09/27 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
python实现按行分割文件
2019/07/22 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
.NET程序员的几道面试题
2012/06/01 面试题
未受刑事制裁公证证明
2014/09/20 职场文书
2014年个人售房协议书
2014/10/30 职场文书
幼儿园感谢信
2015/01/21 职场文书
蓬莱阁导游词
2015/02/04 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
预备党员考察意见范文
2015/06/01 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
Nginx动静分离配置实现与说明
2022/04/07 Servers
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android