SSH端口转发

server/2024/10/16 2:23:07/

文章目录

  • 1. 什么是SSH端口转发
  • 2. SSH本地端口转发
    • 2.1 两台机器的本地端口转发
    • 2.2 三台机器的本地端口转发
  • 3. SSH的远程端口转发
  • 4. 总结
  • 5. 参考博客

1. 什么是SSH端口转发

SSH端口转发可以看作是一种代理,只要你的电脑和服务器能够建立SSH连接,那么就可以通过SSH隧道绕开防火墙的限制实现任意两个端口间的数据通信。

2. SSH本地端口转发

在本地电脑(你的笔记本)设置端口转发,使得你本地电脑从固定端口发出的数据都能绕开防火墙经由ssh隧道到达目标服务器,典型例子就是用vscode在远程服务器运行网站,但你在本地也可以通过localhost:8080进行登入。

2.1 两台机器的本地端口转发

  • 服务器说明
本地电脑
实验室服务器:root@10.249.181.40
  • 任务背景
    本地电脑可以通过SSH连接到服务器,本地应用需要访问服务器上的mysql数据库(3306端口),但由于防火墙限制,我们无法直接访问3306端口,此时我们可以通过SSH端口转发,间接性的访问服务器上的mysql数据库。
  • 运行命令
    在本地电脑运行如下命令
# ssh -L 本地电脑用作代理的端口:远程服务器的IP地址(一般为localhost):远程服务器的端口  远程服务器的用户名@远程服务器的IP地址
ssh -L 7001:localhost:3306 root@10.249.181.40

在这里插入图片描述

  • 命令解释
    上述命令表示在本地电脑和远程服务器间建立一个SSH隧道,将本地的7001端口映射到远程服务器root@10.249.181.40的3306端口上,之后所有发往本地7001端口的数据都会转发到远程服务器的7001端口。例如,我们可以通过访问mysql -hlocalhost -P7001访问远程服务器的数据库。

2.2 三台机器的本地端口转发

  • 服务器说明
本地电脑
公网服务器A:root@121.233.37.238
内网服务器B:root@10.249.181.40
  • 任务背景
    本地电脑可以通过SSH连接到公网服务器A,但无法连接到服务器B,而公网服务器A和内网服务器B同属于一个内网,可以相互连接。我们需要访问内网服务器B,此时我们可以通过SSH端口转发,利用公网服务器A间接的访问内网服务器B。
  • 运行命令
    在本地电脑运行如下命令
# ssh -L 本地电脑用作代理的端口:内网服务器B的IP:内网服务器B的端口  公网服务器A的用户名@公网服务器A的IP地址
ssh -L 7001:10.249.181.40:3306 root@121.233.37.238

在这里插入图片描述

  • 命令解释
    上述命令表示在本地电脑和远程服务器A间建立一个SSH隧道,将本地的7001端口间接性的映射到root@10.249.181.40的3306端口上,之后所有发往本地7001端口的数据都会转发到远程服务器的7001端口。此时公网服务器A相当于本地电脑和内网服务器B沟通的中转站,典型的例子就是VPN。

3. SSH的远程端口转发

远程端口转发就是反过来,在远程服务器运行ssh端口转发的命令。

  • 服务器说明
公网服务器A:root@121.233.37.238
内网服务器B:root@10.249.181.40
  • 任务说明
    我们在内网服务器B上部署了一个web应用,但这个应用只能在服务器B上面访问,我们无法在本地电脑访问Web服务。由前面的知识可知,一个非常简单的解决方法就是通过之前说的SSH本地端口转发,来利用公网服务器A间接访问B上面的Web应用。但在实际生产当中为了保证安全,内网服务器一般是无法从外部访问的,也就是说服务器B可以访问外网,但外网确不能访问服务器B,此时我们无法运用SSH本地端口转发连接上服务器B。考虑到服务器B是可以通过SSH远程连接到服务器A的,此时我们可以利用SSH的远程端口转发实现SSH本地端口转发类似的效果。
  • 运行命令
    在内网服务器B运行如下命令
# ssh -R 远程服务器A的端口:本地的IP地址(一般为localhost):本地的端口  远程服务器A的用户名@远程服务器A的IP地址
ssh -R 7001:localhost:8080 root@121.233.37.238

在这里插入图片描述

  • 命令说明
    通过上述命令,公网服务器A和内网服务器B建立了一个双向访问的SSH隧道,此时公网服务器A的7001端口映射到内网服务器B的8080端口,我们可以通过访问121.233.37.238:7001来间接访问部署在服务器B上面的Web应用。

4. 总结

在本地电脑(你的笔记本)上面就用SSH本地端口转发,在服务器你就用SSH远程端口转发,两个转发的最终结果都是一样的,都是在本地电脑和远程服务器之间建立双向通信的SSH隧道。

5. 参考博客

深入 SSH:解锁本地转发、远程转发和动态转发的潜力
ssh本地端口转发,远程端口转发,隧道(这个解释不饶)
SSH端口转发概述


http://www.ppmy.cn/server/102460.html

相关文章

汽车IVI中控OS Linux driver开发实操(二十四):I2C设备驱动的编写

概述: 在Linux驱动中I2C系统中主要包含以下几个成员: I2C adapter(即I2C适配器,用来控制各种I2C从设备,其驱动需要完成对适配器的完整描述,最主要的工作是需要完成i2c_algorithm结构体。这个结构体包含了此I2C控制器的数据传输具体实现,以及对外上报此设备所支持的功…

Redis5.0单实例数据迁移至分片集群

Redis 5.0 数据迁移至分片集群主要思路是: 如果你的数据全部在 DB0 ,那么按照下边的步骤来操作 1、创建好分片集群 2、需要手动刷新触发全部落盘,备份源rdb或者aof 3、停止原实例的写入(需要你暂停所有相关的服务,…

微信小程序开发构建npm

构建微信小程序中构建npm报错: message: NPM packages not found. Please confirm npm packages which need to build are belong to miniprogramRoot directory. Or you may edit project.config.jsons packNpmManually and packNpmRelationList appid…

OpenCV编译指南-Windows-CMake

前言: 针对opencv的编译容易出现许许多多问题,博主已经将可能遇到的坑几乎都走了一遍,在此记录。一方面作为日后查阅指南,另一方面也给诸位提供便利。谢谢! 1、必要下载准备 CMake:Download CMake visual studio:想必开发者计算机中都有这个软件 OpenCV下载:OpenCV…

机器人等方向学习和研究的目标

核心目标类似: 学习一个知识点用时越来越短,研究一个系统效率越来越高。 目标 没有目标是常态,十分普遍。 但其实,目标也可以很宽泛。 感谢朋友们一直以来的鼓励帮助,倍感荣幸,非常感谢。-CSDN blink-…

Java实现K个排序链表的高效合并:逐一合并、分治法与优先队列详解

Java实现K个排序链表的高效合并:逐一合并、分治法与优先队列详解 在算法和数据结构的学习中,链表是一个非常基础但又极具挑战的数据结构。尤其是当面对合并多个排序链表的问题时,如何在保证效率的前提下实现代码的简洁与高效,往往…

【网络编程】 基于UDP的网络聊天室

前言 将前面的数据结构,多线程,网络的内容加在一起的一个项目,比较综合,在代码部分采用了分文件编译并且写了比较详细的注释(个人觉得)。 ps:希望对大家有用 项目需求: 如果有用户登录&#xf…

机器学习/自主系统与亚当·斯密

人工智能中的机器学习和自主系统是当前科技领域的热门话题,它们与亚当斯密的经济学理论之间可能存在一些潜在的联系和启示。亚当斯密的经济学理论主要关注市场经济的运行和资源分配。他的核心观点是,通过市场机制的作用,个体追求自身利益的行…