当前位置: 首页 > news >正文

SSH隧道验证的原理及实现例子

SSH 隧道验证原理详解

**SSH 隧道(SSH Tunneling)**是通过 SSH 协议将数据在客户端和服务器之间加密传输的一种技术。它可以在不安全的网络上创建一个安全的、加密的通道,用于传输各种数据,例如通过不安全的网络远程登录、传输文件等。

SSH 隧道常用于:

  1. 端口转发:允许将本地计算机上的某个端口与远程计算机上的端口进行关联。
    • 本地端口转发:本地的应用程序可以通过本地计算机上的某个端口,安全地访问远程计算机上的服务。
    • 远程端口转发:允许远程服务器的端口通过 SSH 隧道转发到本地计算机。
  2. 动态端口转发:可以动态分配隧道端口,支持多个目标服务和主机访问。

SSH 隧道的典型用途包括:

  • 绕过防火墙限制:通过 SSH 隧道连接受限的网络资源,绕过防火墙的封锁。
  • 安全访问数据库或远程服务:通过 SSH 隧道加密本地和远程服务器之间的数据库连接。
  • 远程桌面安全传输:在安全隧道中传输远程桌面协议(RDP)等不安全的数据。
SSH 隧道的工作原理:
  1. 建立 SSH 连接:客户端通过 SSH 协议与服务器建立加密连接。SSH 连接会加密整个通信通道,确保数据在传输过程中不会被窃听。
  2. 端口转发:SSH 隧道可以通过 SSH 连接在客户端和服务器之间转发特定端口的数据。具体可以分为本地端口转发、远程端口转发和动态端口转发。
  3. 安全传输数据:数据通过加密的 SSH 隧道进行传输,确保传输的数据的机密性和完整性。

Python3 实现 SSH 隧道验证的示例

我们可以使用 paramikosshtunnel 库在 Python 中实现 SSH 隧道,并进行本地或远程端口转发。

第一步:安装依赖
pip install paramiko sshtunnel
第二步:Python SSH 隧道示例

假设我们希望通过 SSH 隧道访问远程数据库服务器,远程数据库的服务在端口 3306 上运行,但该端口只在服务器本地可见。我们可以通过 SSH 隧道将该端口转发到本地。

from sshtunnel import SSHTunnelForwarder
import pymysql# SSH 服务器信息
SSH_HOST = 'ssh.example.com'      # 替换为实际的 SSH 服务器地址
SSH_PORT = 22                     # SSH 默认端口是 22
SSH_USER = 'ssh_user'             # 替换为实际的 SSH 用户名
SSH_PASSWORD = 'your_password'    # 替换为实际的 SSH 密码# 远程数据库信息
REMOTE_DB_HOST = '127.0.0.1'      # 远程数据库服务器地址
REMOTE_DB_PORT = 3306             # 远程数据库服务端口
DB_USER = 'db_user'               # 数据库用户名
DB_PASSWORD = 'db_password'       # 数据库密码
DB_NAME = 'mydatabase'            # 数据库名称# 本地端口(通过SSH隧道访问)
LOCAL_PORT = 10022  # 本地端口(可以随机选择一个未占用的端口)# 创建 SSH 隧道
with SSHTunnelForwarder((SSH_HOST, SSH_PORT),  # SSH服务器地址和端口ssh_username=SSH_USER,ssh_password=SSH_PASSWORD,remote_bind_address=(REMOTE_DB_HOST, REMOTE_DB_PORT),  # 远程数据库地址和端口local_bind_address=('127.0.0.1', LOCAL_PORT)  # 将远程端口绑定到本地端口
) as tunnel:print(f"SSH隧道建立成功,通过本地端口 {LOCAL_PORT} 访问远程数据库")# 使用pymysql连接到通过隧道映射到本地的远程数据库connection = pymysql.connect(host='127.0.0.1',port=LOCAL_PORT,  # 使用SSH隧道转发到的本地端口user=DB_USER,password=DB_PASSWORD,db=DB_NAME)try:with connection.cursor() as cursor:# 执行查询cursor.execute("SELECT VERSION()")db_version = cursor.fetchone()print(f"Database version: {db_version[0]}")finally:connection.close()

代码解释:

  1. SSHTunnelForwarder:这是 sshtunnel 库中的核心类,用于创建 SSH 隧道。通过该类,我们可以将远程服务器上的端口绑定到本地的一个端口。

    • remote_bind_address:指定远程服务器上的端口,例如远程数据库端口 3306。
    • local_bind_address:指定本地的一个端口(例如 10022),通过该端口可以访问远程数据库。
  2. 数据库连接:一旦 SSH 隧道建立成功,代码使用 pymysql 连接到本地转发的端口(实际上是远程数据库),并执行 SQL 查询。

  3. 执行 SQL 查询:连接成功后,使用 SQL 查询获取数据库的版本信息。

SSH 隧道的类型:

  1. 本地端口转发(Local Port Forwarding):将远程服务器的端口映射到本地计算机上,从而允许本地应用通过指定的端口访问远程服务。例如,示例代码中,我们将远程数据库服务器的端口 3306 映射到本地端口 10022。

  2. 远程端口转发(Remote Port Forwarding):将本地计算机的端口映射到远程服务器,从而允许远程服务器上的应用程序访问本地服务。

  3. 动态端口转发(Dynamic Port Forwarding):使用 SOCKS 协议创建隧道,可以动态选择不同的目标主机和端口进行通信。

注意事项:

  • 安全性:SSH 隧道提供了加密通信,防止数据被截获和篡改。然而,在使用时应确保 SSH 密码或私钥的安全性。
  • 性能:SSH 隧道的性能可能会受到网络延迟和加密解密的影响,因此在高负载下可能需要优化。
  • 连接管理:在实际使用中,可能需要更复杂的错误处理和连接管理机制,特别是在长时间运行的服务中。

总结

SSH 隧道是一种强大且安全的技术,广泛应用于远程访问和加密传输中。通过 Python 中的 paramikosshtunnel 库,可以轻松实现 SSH 隧道,并用于安全访问远程服务,如数据库、Web 服务等。


产品简介

  • 梧桐数据库(WuTongDB)是基于 Apache HAWQ 打造的一款分布式 OLAP 数据库。产品通过存算分离架构提供高可用、高可靠、高扩展能力,实现了向量化计算引擎提供极速数据分析能力,通过多异构存储关联查询实现湖仓融合能力,可以帮助企业用户轻松构建核心数仓和湖仓一体数据平台。
  • 2023年6月,梧桐数据库(WuTongDB)产品通过信通院可信数据库分布式分析型数据库基础能力测评,在基础能力、运维能力、兼容性、安全性、高可用、高扩展方面获得认可。

点击访问:
梧桐数据库(WuTongDB)相关文章
梧桐数据库(WuTongDB)产品宣传材料
梧桐数据库(WuTongDB)百科

相关文章:

SSH隧道验证的原理及实现例子

SSH 隧道验证原理详解 **SSH 隧道(SSH Tunneling)**是通过 SSH 协议将数据在客户端和服务器之间加密传输的一种技术。它可以在不安全的网络上创建一个安全的、加密的通道,用于传输各种数据,例如通过不安全的网络远程登录、传输文…...

[计算机视觉]chapter1

一、什么是计算机视觉 计算机视觉就是用计算机编程,并设计算法来理解在这些图像中有什么。计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼…...

RTKLIB学习记录【postpos、execses_b、execses_r】

本文主要记录对RTKLIB源码中postpos、execses_b、execses_r 函数的源码解读,不涉及其中的天线、星历等文件读取的内容,且为个人理解,如果有误,欢迎交流讨论。 一、postpos 函数部分 /rxn2rtkp函数 → postpos函数传递参数&#x…...

docker,docker-desktop,docker-compose download

docker docker-compose download 百度网盘获取离线包链接release-notes 参考dockerdocker-composewlspowershell...

C#_带参数的委托进入队列执行

我们经常会遇到一些函数多个地方调用,但是只能单独执行的就需要把它放到队列中执行。 1.创建对应该方法的委托(传参和回参类型需要一致)。 //委托: public delegate void CameraTaskDelegate(byte cs, ref byte[] buffer);//对应函数: public void CameraSettingRead(by…...

【OpenCV】(二)—— 图片读取展示和保存

上一小节中我们成功安装了opencv,我们这次学习使用opencv最基础的功能,读取和展示图片,首先准备一张用于实验的样例图片【cat.jpg】如下: 然后就是创建一个python项目并导入相关依赖 import cv2读取图片 读取图片使用imread方法…...

【花卉识别系统】Python+卷积神经网络算法+人工智能+深度学习+图像识别+算法模型

一、介绍 花朵识别系统。本系统采用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,并基于前期收集到的5种常见的花朵数据集(向日葵、玫瑰、蒲公英、郁金香、菊花)进行处理后进行模型训练,最…...

k8s、prometheus、grafana数据采集和展示的链路流程

k8s集群中,容器级别的数据采集是由cAdvisor程序实现 cAdvisor # Container Advisor 容器顾问 cAdvisor程序是kubelet组件的一部分。 每个节点,包括master节点,都有一个kubelet系统服务, kukelet负责管理pod和容…...

sentinel dashboard改造落地设计实现解释(一)-分布式fetcher和metrics存储/搜索

背景 微服务是目前java主流架构,微服务架构技术栈有,服务注册中心,网关,熔断限流,服务同学,配置中心等组件,其中,熔断限流主要3个功能特性,限流,熔断,快速失败。Sentinel是阿里开源的熔断限流组件,sentinel dashboard是演示级别,表现在metrics采集是单机版,metri…...

LabVIEW提高开发效率技巧----时序分析

一、什么是时序分析? 时序分析是优化LabVIEW程序性能的重要步骤。它通过分析程序各个部分的执行时间,帮助开发者找到程序运行中的瓶颈,并进行有针对性的优化。在LabVIEW中,Profile Performance and Memory工具是进行时序分析的关…...

python不用ide也能进行调试

import pdb pdb.set_trace()import pdb 和 pdb.set_trace() 是 Python 中用于调试代码的工具。以下是它们的具体含义和用法: import pdb pdb 是 Python 的内置调试器模块,允许开发者在运行时进行代码调试。 通过 import pdb 语句,你可以引入…...

Django学习笔记之Django基础学习

Django笔记 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录…...

smartctl 设置硬盘的 write-caching

sg3 一、sg3查看缓存状态 您可以使用sg_modes命令来查看SAS盘和SATA盘的缓存状态。例如,要查看/dev/sdb设备的缓存状态,您可以执行以下命令: sg_modes -p 8,0 /dev/sdb 二、sg3关闭机械盘写缓存状态(仅适用于SAS盘&#xff09…...

【Spring AI】Java实现类似langchain的向量数据库RAG_原理与具体实践

介绍一下RAG: 检索增强生成(RAG)是一种技术,它结合了检索模型和生成模型来提高文本生成的质量。通过从企业私有或专有的数据源中检索相关信息,并将这些信息与大型语言模型相结合,RAG能够显著减少模型产生幻…...

linux下使用systemctl设置开机自动运行程序

本文介绍在Linux下,使用systemctl设置开机自动运行程序,实现创建一个systemd服务单元文件,并启用该服务的方法。 1、创建.service文件 在/etc/systemd/system/目录下创建一个以.service结尾的文件,例如myapp.service&#xff1a…...

复位电路的亚稳态

复位导致亚稳态的概念: 同步电路中,输入数据需要与时钟满足setup time和hold time才能进行数据的正常传输(数据在这个时间段内必须保持不变:1不能变为0,0也不能变为1),防止亚稳态; …...

针对考研的C语言学习(循环队列-链表版本以及2019循环队列大题)

题目 【注】此版本严格按照数字版循环队列的写法,rear所代表的永远是空数据 图解 1.初始化部分和插入部分 2出队 3.分部代码解析 初始化 void init_cir_link_que(CirLinkQue& q) {q.rear q.front (LinkList)malloc(sizeof(LNode));q.front->next NULL…...

系统架构设计师教程 第12章 12.4 信息系统架构案例分析 笔记

12.4 信息系统架构案例分析 ★★★★☆ 12.4.1 价值驱动的体系结构——连接产品策略与体系结构 1.价值模型概述 价值模型核心的特征可以简化为三种基本形式。 (1)价值期望值:表示对某一特定功能的需求,包括功能、质量和不同 级别质量的实用性。 (2)…...

web1.0,web2.0,web3.0 有什么区别 详解

Web 的发展经历了多个阶段,每个阶段都有其独特的特点和技术进步。下面是 Web 1.0、Web 2.0 和 Web 3.0 之间的主要区别和详细解释: Web 1.0 时间范围:大约在 1991 年至 1995 年。 Web 1.0 是互联网的最初形态,也被称为静态 Web…...

将图片添加到 PDF 的 5 种方法

需要一种称为 PDF 编辑器的特定工具才能将图片添加到 PDF。尽管大多数浏览器在查看和注释 PDF 文件方面都非常出色,但如果您使用图像到 PDF 技术,则只能将照片放入 PDF 中。无需修改即可将 PDF 文件恢复为原始格式的能力是使用此类软件程序甚至在线服务的…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...