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

使用 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.rhkb.cn/news/433578.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes从零到精通(15-安全)

目录 一、Kubernetes API访问控制 1.传输安全(Transport Security) 2.认证(Authentication) 2.1 认证方式 2.2 ServiceAccount和普通用户的区别 2.3 ServiceAccount管理方式 自动ServiceAccount示例 手动ServiceAccount示例 3.鉴权 (Authorization) 3.1鉴权方式 3.2 …

TOF系列—深度图滤波

本篇文章主要介绍TOF深度图的后处理&#xff0c;鉴于自身水平所限&#xff0c;如有错误&#xff0c;欢迎批评指正。&#xff08;欢迎进Q群交流&#xff1a;874653199&#xff09; TOF由于其本身的特性&#xff0c;导致其所获得的深度图存在以下问题&#xff1a; 1.对空的地方存…

Kafka学习笔记(一)Kafka基准测试、幂等性和事务、Java编程操作Kafka

文章目录 前言4 Kafka基准测试4.1 基于1个分区1个副本的基准测试4.2 基于3个分区1个副本的基准测试4.3 基于1个分区3个副本的基准测试5 Java编程操作Kafka5.1 引入依赖5.2 向Kafka发送消息5.3 从Kafka消费消息5.4 异步使用带有回调函数的生产消息6 幂等性6.1 幂等性介绍6.2 Kaf…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(一)-概述

简介 此前的专栏介绍onesearch1.0和2.0&#xff0c;详情参看4 参考资料&#xff0c;本文解释onesearch 3.0&#xff0c;从Elasticsearch6升级到Elasticsearch8代码实现 &#xff0c;Elasticsearch8 废弃了high rest client&#xff0c;使用新的ElasticsearchClient&#xff0c;…

AI驱动的智能运维:行业案例与挑战解析

华为、蚂蚁、字节跳动如何引领智能运维&#xff1f; ©作者|潇潇 来源|神州问学 引言 OpenAI 发布的 ChatGPT 就像是打开了潘多拉的魔盒&#xff0c;释放出了生产环境中的大语言模型&#xff08;LLMs&#xff09;。一些新的概念&#xff1a;“大语言模型运维 (LLMOps)”…

统信服务器操作系统进入【单用户模式】

统信服务器操作系统D版、E版、A版进入单用户模式的方式。 文章目录 前言一、问题现象二、问题原因三、解决方案1. D版问题解决方案2. E版及A版问题解决方案前言 D版又称企业版、E版又称欧拉版、A版又称龙蜥版。 单用户模式主要是在 grub2 引导时编辑内核引导,一般用于修改用…

mysql索引结构操作(主键/唯一键/普通索引的创建/查询/删除),复合索引介绍(索引覆盖,索引最左匹配原则)

目录 索引操作 创建索引 主键索引 介绍 在创建表时设置主键 创建表后添加主键 唯一键索引 介绍 在创建表时设置唯一键 创建表后添加唯一键 普通索引 在创建表时指定某列为索引 创建表后添加普通索引 自主命名索引 索引创建原则 哪些列适合创建索引 不适合作为…

【Linux:共享内存】

共享内存的概念&#xff1a; 操作系统通过页表将共享内存的起始虚拟地址映射到当前进程的地址空间中共享内存是由需要通信的双方进程之一来创建但该资源并不属于创建它的进程&#xff0c;而属于操作系统 共享内存可以在系统中存在多份&#xff0c;供不同个数&#xff0c;不同进…

14 vue3之内置组件trastion全系列

前置知识 Vue 提供了 transition 的封装组件&#xff0c;在下列情形中&#xff0c;可以给任何元素和组件添加进入/离开过渡: 条件渲染 (使用 v-if)条件展示 (使用 v-show)动态组件组件根节点 自定义 transition 过度效果&#xff0c;你需要对transition组件的name属性自定义。…

基于BeagleBone Black的网页LED控制功能(flask+gpiod)

目录 项目介绍硬件介绍项目设计开发环境功能实现控制LED外设构建Webserver 功能展示项目总结 &#x1f449; 【Funpack3-5】基于BeagleBone Black的网页LED控制功能 &#x1f449; Github: EmbeddedCamerata/BBB_led_flask_web_control 项目介绍 基于 BeagleBoard Black 开发板…

ChatGPT 推出“Auto”自动模式:智能匹配你的需求

OpenAI 最近为 ChatGPT 带来了一项新功能——“Auto”自动模式&#xff0c;这一更新让所有用户无论使用哪种设备都能享受到更加个性化的体验。简单来说&#xff0c;当你选择 Auto 模式后&#xff0c;ChatGPT 会根据你输入的提示词复杂程度&#xff0c;自动为你挑选最适合的AI模…

DataGrip远程连接Hive

学会用datagrip远程操作hive 连接前提条件&#xff1a; 注意&#xff1a;mysql是否是开启状态 启动hadoop集群 start-all.sh 1、启动hiveserver2服务 nohup hiveserver2 >> /usr/local/soft/hive-3.1.3/hiveserver2.log 2>&1 & 2、beeline连接 beelin…

缓存装饰器@cached_property

这个装饰器好像在好多包里都有&#xff0c;我在阅读源码的过程中&#xff0c;transformers.utils也有这个。查阅资料&#xff0c;大体上了解了它的用法。参考&#xff1a;[python]cached_property缓存装饰器 - faithfu - 博客园 这个装饰器用在类里面的某个方法前面&#xff0…

统信服务器操作系统【qcow2 镜像空间扩容】方案

使用 qcow2 镜像安装系统,当默认安装系统存储空间不够用时,进行自定义扩容 文章目录 准备环境扩容步骤一、检查环境信息1.查看镜像信息2.查看镜像分区信息3.确认需要扩容的分区名二、扩容1.备份镜像2.创建新的镜像文件,并指定空间3.将系统扩容到新的镜像三、扩容 lvm 分区四…

用5款AI帮你写论文,只需10分钟(附详细工具)

在当前的学术写作领域&#xff0c;AI技术的应用已经变得越来越普遍。借助这些工具&#xff0c;学生和研究人员可以显著提高写作效率&#xff0c;并在短时间内生成高质量的论文初稿。以下是五款值得推荐的AI论文写作工具&#xff0c;它们可以帮助你在10分钟内完成一篇论文&#…

【笔记】自动驾驶预测与决策规划_Part4_时空联合规划

文章目录 0. 前言1. 时空联合规划的基本概念1.1 时空分离方法1.2 时空联合方法 2.基于搜索的时空联合规划 &#xff08;Hybrid A* &#xff09;2.1 基于Hybrid A* 的时空联合规划建模2.2 构建三维时空联合地图2.3 基于Hybrid A*的时空节点扩展2.4 Hybrid A* &#xff1a;时空节…

Centos 7 搭建Samba

笔记&#xff1a; 环境&#xff1a;VMware Centos 7&#xff08;网络请选择桥接模式&#xff0c;不要用NAT&#xff09; 遇到一个问题就是yum 安装404&#xff0c;解决办法在下面&#xff08;没有遇到可以无视这句话&#xff09; # 安装Samba软件 yum -y install samba# 创建…

性能测试:性能测试计划

性能测试计划是在进行软件或系统的性能测试之前制定的详细计划和指导文件。它描述了所需性能测试的目标、范围、测试环境、资源需求、测试策略、测试用例、时间表等重要信息。 为什么要制定性能测试计划 制定性能测试计划的主要目的是确保性能测试的有效性和可靠性。以下是制…

THREE.JS法线Shader

以普通情况而论 vNormal normal;//...gl_FragColor vec4( vNormal, 1. );vNormal normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );vNormal normalMatrix * normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );normalMa…

【Android】布局优化—include,merge,ViewStub的使用方法

引言 1.重要性 在Android应用开发中&#xff0c;布局是用户界面的基础。一个高效的布局不仅能提升用户体验&#xff0c;还能显著改善应用的性能。随着应用功能的复杂性增加&#xff0c;布局的优化变得尤为重要。优化布局能够减少渲染时间&#xff0c;提高响应速度&#xff0c…