当前位置: 首页 > 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 文件恢复为原始格式的能力是使用此类软件程序甚至在线服务的…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...