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科学计算环境推荐——Anaconda
Jun 30 Python
Python中的rfind()方法使用详解
May 19 Python
Python base64编码解码实例
Jun 21 Python
Python向日志输出中添加上下文信息
May 24 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
Python 确定多项式拟合/回归的阶数实例
Dec 29 Python
python实现批量视频分帧、保存视频帧
May 31 Python
python set内置函数的具体使用
Jul 02 Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 Python
python画环形图的方法
Mar 25 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
pytorch 如何把图像数据集进行划分成train,test和val
May 31 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
wxpython 学习笔记 第一天
2009/02/09 Python
python web基础之加载静态文件实例
2018/03/20 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
Python restful框架接口开发实现
2020/04/13 Python
python如何安装下载后的模块
2020/07/03 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
趣天网日本站:Qoo10 JP
2019/09/18 全球购物
女方婚礼新郎答谢词
2014/01/11 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
外科护士长工作总结
2015/08/12 职场文书
JS ES6异步解决方案
2021/04/29 Javascript
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js
windows系统搭建WEB服务器详细教程
2022/08/05 Servers