使用 Paramiko 实现 SSH 远程连接和命令执行

news2024/9/28 4:06:42

使用 Paramiko 实现 SSH 远程连接和命令执行

在这里插入图片描述

每当灶火燃起,香气弥漫,熟悉的味道植入记忆深处,家,才获得完整的意义。万户千家,味道迥异,但幸福的滋味,却何其相同。
——《风味人间》

在现代网络管理中,远程管理设备变得越来越重要。本文将详细介绍如何使用 Python 的 Paramiko 库通过 SSH 连接到交换机,并执行命令以获取其状态。我们将分析代码的每个部分,以及使用该代码的实际场景。

一、代码概述

我们编写的代码主要实现了以下功能:

  1. 通过 SSH 连接到网络设备(如交换机)。
  2. 发送命令并获取设备的响应。
  3. 将设备状态记录到日志中。

代码结构

代码由几个主要部分组成:

  1. 导入模块

    import paramiko  
    import time  
    import logging
    
    • paramiko:用于实现 SSH 连接。
    • time:用于控制延迟和超时。
    • logging:用于记录日志,便于后续审查。
  2. 日志设置

    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
    

    这里我们设置了日志级别和格式,使得日志输出更易于阅读和分析。

  3. 发送命令的函数

    def send_command(remote_conn, command, timeout=2):
    

    该函数的主要任务是向远程设备发送命令并接收其输出。它通过循环检查输出是否准备好,并在必要时实现超时机制,以避免长时间等待。

  4. 获取交换机状态的函数

    def get_switch_status(ip, username, password):
    

    该函数通过提供的 IP 地址、用户名和密码连接到交换机,并发送命令以获取交换机版本信息。连接失败时会记录错误日志。

  5. 交换机列表和批量检查

    switches = [("192.168.249.100", "root", "888888")]
    

    在这个例子中,我们只连接了一个交换机,但可以轻松扩展为多个设备。

二、代码分析

1. 连接和会话

通过 paramiko.SSHClient 创建 SSH 客户端并连接设备。使用 invoke_shell() 方法获取一个交互式会话,允许我们发送命令并接收输出。

2. 发送命令

send_command 函数中使用 remote_conn.send(command + "\n") 发送命令。接下来,通过循环检查 recv_ready() 方法来获取命令输出。

3. 超时控制

为了避免在接收命令输出时陷入无限等待,我们实现了一个简单的超时机制,确保程序在指定时间内完成。

4. 错误处理

通过 try-except-finally 块处理可能的异常,确保即使发生错误也能正常关闭 SSH 连接并记录日志。

三、使用场景

这种 SSH 远程管理的方案适合于多种场景,例如:

  1. 网络设备监控
    在大型网络环境中,管理员需要定期检查设备状态。使用该脚本可以轻松获取交换机的版本信息,确保设备正常运行。

  2. 自动化运维
    在日常运维中,管理员可以将此脚本集成到更复杂的自动化工作流中,实现设备配置、状态检查等操作的自动化。

  3. 故障排除
    当网络出现问题时,快速获取设备状态可以帮助管理员迅速定位问题源。

四、完整代码

以下是完整的代码实现:

# -*- coding: utf-8 -*-
import paramiko  
import time  
import logging  
  
# 设置日志  
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')  
  
def send_command(remote_conn, command, timeout=2):  
    """发送命令并接收响应"""  
    remote_conn.send(command + "\n")  
    time.sleep(1)  # 等待命令执行  
    output = ""  
    # 可能需要多次接收来确保获取完整的输出  
    while True:  
        if remote_conn.recv_ready():  
            data = remote_conn.recv(65535).decode('utf-8')  
            if not data:  
                break  
            output += data  
        else:  
            # 设置超时以避免无限等待  
            time.sleep(0.1)  
            timeout -= 0.1  
            if timeout <= 0:  
                break  
    return output  
  
def get_switch_status(ip, username, password):  
    client = paramiko.SSHClient()  
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())  
      
    try:  
        client.connect(ip, username=username, password=password, look_for_keys=False, allow_agent=False, timeout=10)  
          
        remote_conn = client.invoke_shell()  
        time.sleep(1)  # 等待会话稳定  
          
        # 发送命令并接收输出  
        output = send_command(remote_conn, "display version")  
          
        # 打印输出  
        logging.info(f"====== {ip} ======")  
        logging.info(output)  
        logging.info("===================")  
          
    except Exception as e:  
        logging.error(f"Failed to connect to {ip}: {str(e)}")  
    finally:  
        client.close()  
  
# 交换机列表  
switches = [  
    ("192.168.249.100", "root", "888888")  
]  
  
# 批量检查交换机状态  
for ip, username, password in switches:  
    get_switch_status(ip, username, password)

五、总结

本文介绍了如何使用 Python 的 Paramiko 库通过 SSH 远程连接和管理网络设备。代码实现简单高效,适用于多种网络管理场景。希望这篇博客能帮助你更好地理解如何使用 Python 进行网络设备管理。如果有任何问题或改进建议,欢迎留言讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2172216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux集群部署RabbitMQ

目录 一、准备三台虚拟机&#xff0c;配置相同 1、所有主机都需要hosts文件解析 2、所有主机安装erLang和rabbitmq 3、修改配置文件 4、导入rabbitmq 的管理界面 5、查看节点状态 6、设置erlang运行节点 7、rabitmq2和rabbitmq3重启服务 8、查看各个节点状态 二、添加…

计算机视觉|机器学习中图片特征向量的提取方式:开启图像世界的钥匙

文章目录 什么是特征向量&#xff1f;常见的图片特征向量提取方法1. **手工设计的特征**SIFT&#xff08;尺度不变特征变换&#xff09;HOG&#xff08;方向梯度直方图&#xff09; 2. **卷积神经网络 (CNN)**3. **预训练模型**4. **自监督学习** 结语 今天我们将一起深入探讨机…

powerbi计算销售额同比增长率

在上一篇我们介绍了销售额累计同比增长率的计算方法&#xff0c;本篇将为大家接受销售额同比增长率的计算&#xff0c;建议大家结合上篇阅读&#xff0c;可以比较一下不同之处&#xff0c;注意区分&#xff0c;上一篇链接如下&#xff1a; powerbi计算销售额累计同比增长率——…

基于Hive和Hadoop的共享单车分析系统

本项目是一个基于大数据技术的共享单车分析系统&#xff0c;旨在为用户提供全面的单车使用信息和深入的出行行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 S…

C语言VS实用调试技巧

文章目录 一、什么是bug?二、什么是调试&#xff1f;三、Debug和Release四、VS调试快捷键4.1环境准备4.2调试快捷键 五、监视和内存观察5.1监视5.2内存 六、调试举例七、编程常见错误归类7.1编译型错误7.2链接型错误7.3运行时错误 一、什么是bug? &#x1f34e;bug本意是 “…

外国名人面孔识别系统源码分享

外国名人面孔识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

【安当产品应用案例100集】018-Vmware Horizon如何通过安当ASP身份认证系统增强登录安全性

启用Radius认证是提高VMware Horizon环境安全性的有效方法&#xff0c;特别是在需要满足复杂安全要求的场景中。 启用Radius认证对于VMware Horizon具有以下几个关键优势&#xff1a; 增强安全性&#xff1a;Radius认证支持多种认证方法&#xff0c;包括PAP、CHAP、MS-CHAPv1…

Funsound 跨语言语音翻译

对任意语言的音视频识别得到目标语言文字结果&#xff0c;支持100种语言互译&#xff0c;视频支持在线添加字幕 体验地址 https://www.funsound.cn/st https://modelscope.cn/studios/QuadraV/Funsound_Multiligual_translator https://huggingface.co/spaces/QuadraV/Funsou…

基于nodejs的网球/篮球/体育场地管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

【芋道源码】gitee很火的开源项目pig——后台管理快速开发框架使用笔记(微服务版之本地开发环境篇)

后台管理快速开发框架使用笔记&#xff08;微服务版之本地开发环境篇&#xff09; 后台管理快速开发框架使用笔记&#xff08;微服务版之本地开发环境篇&#xff09; 后台管理快速开发框架使用笔记&#xff08;微服务版之本地开发环境篇&#xff09;前言一、如何获取项目&#…

HAL+M4学习记录_2

一、Boot配置 内存地址是固定的&#xff0c;代码从0x0000 0000开始&#xff0c;而数据从0x2000 0000开始&#xff0c;F4支持三种不同的boot模式 复位芯片时&#xff0c;在SYSCLK的第4个上升沿BOOT引脚值被锁存&#xff0c;STM32F407通过此时BOOT[1:0]引脚值选择Boot模式 BOOT1…

一种误差较小的计算轮廓法向的方法

1.前言 轮廓有正面和反面&#xff0c;可以通过其法向识别正反面&#xff0c;而法向是轮廓或面的重要特征&#xff0c;求轮廓法向是一种基础的几何工具算法。 由于浮点数存储和运算的精度损失&#xff0c;可能造成求轮廓法向的精度损失&#xff0c;如角点由于精度损失并非精确的…

工业5G路由器赋能防灾减灾地震监测物联网应用

在智慧城市及科技迅速发展的时代&#xff0c;地震监测作为防灾减灾的关键设施&#xff0c;正逐渐融入物联网技术的广阔蓝图中。工业物联网路由器作为关键的通讯枢纽&#xff0c;赋能地震监测实现智能化升级。 地震监测过程要求数据传输的实时性和准确性&#xff0c;而工业物联网…

DK5V100R15ST1直插TO220F,12V 4A两个引脚同步整流芯片

高性能两个引脚同步整流芯片 DK5V100R15ST1产品 概述DK5V100R15ST1是一款简单高效率的同步整流芯片&#xff0c;只有A&#xff0c;K两个引脚&#xff0c;分别对应肖特基二极管PN管脚。芯片内部集成了100V功率NMOS管&#xff0c;可以大幅降低二极管导通损耗&#xff0c;提高整机…

【计算机网络 - 基础问题】每日 3 题(二十五)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

为什么电瓶车上楼充电引起的电气火灾还是一直发生?

0引言 近日&#xff0c;电瓶车火灾事件再次发生&#xff0c;随后主管部门、物业等相关方纷纷发布通知&#xff0c;提出种种禁令&#xff0c;然而这些措施似乎并未触及问题的核心&#xff0c;其效果也显得微乎其微。唯有从根本上解决问题&#xff0c;才能有效消除安全隐患。回顾…

项目实战:Ingress搭建Nginx+WP论坛+MariaDB

1. 网站架构 本次部署形式完全舍弃 Docker&#xff0c;将所有应用都置于Kubernetes&#xff0c;采用 Deployment 而非单 Pod 部署&#xff0c;稳定性得到升级。 2. 部署 MariaDB [rootk8s-master ~]# mkdir tdr [rootk8s-master ~]# cd tdr/ &#xff08;1&#xff09;定义 …

再也不怕数据丢失!四款数据恢复免费软件分享!

在数据满天飞的今天&#xff0c;一不小心就可能遭遇数据丢失的“惊魂一刻”。虽然数据丢失几乎是大家遇到过的事情&#xff0c;不仅仅是数据被删除&#xff0c;也可能是因为一些小意外。不过别担心&#xff0c;今天就来聊聊四位数据恢复界的“护法”&#xff0c;看看它们在实战…

PostgreSQL 创建表,常规表、外部表、分区表区别讲解

PostgreSQL 创建表&#xff0c;常规表、外部表、分区表区别讲解 创建表&#xff0c;常规表、外部表、分区表区一、常规表1. 定义和特点&#xff1a;2. 适用场景&#xff1a; 二、外部表1. 定义和特点&#xff1a;2. 适用场景&#xff1a; 三、分区表1. 定义和特点&#xff1a;2…

quiz: python网络爬虫之规则1

下面答错了&#xff1a; B c 8A&#xff0c; 9A