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 06 Python
python获取元素在数组中索引号的方法
Jul 15 Python
详解python实现识别手写MNIST数字集的程序
Aug 03 Python
Python之inspect模块实现获取加载模块路径的方法
Oct 16 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
python重试装饰器的简单实现方法
Jan 31 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
Feb 22 Python
解决python tkinter界面卡死的问题
Jul 17 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 Python
python用700行代码实现http客户端
Jan 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+mysql大量用户登录解决方案分析
2014/12/29 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
PHP文件与目录操作示例
2016/12/24 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
vue router demo详解
2017/10/13 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
Python计算回文数的方法
2015/03/11 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
Python对excel文档的操作方法详解
2018/12/10 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
Python中如何引入第三方模块
2020/05/27 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
教学器材管理制度
2014/01/26 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
工地安全标语
2014/06/07 职场文书
股指期货心得体会
2014/09/13 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
党课主持词大全
2015/06/30 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
java解析XML详解
2021/07/09 Java/Android
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL