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

SSH端口转发

文章目录

  • 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端口转发概述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 12、springboot3 vue3开发平台-前端-记住我功能实现
  • Python向IP地址发送字符串
  • HTML静态网页成品作业(HTML+CSS)——原神介绍设计制作(4个页面)
  • 【Redis】如何从单机架构演化为分布式系统
  • 【JAVA入门】Day20 - 正则表达式
  • XSS之xss game
  • Epic Games 商店面向欧盟 iPhone 用户上线
  • K8S系列——(一)、Ubuntu上安装Helm
  • Java实现腾讯云人脸识别集成:如何为司机创建人脸模型
  • Angular由一个bug说起之九:AWS S3 文件下载问题
  • MySQL8 innoDB引擎的精髓
  • 日志管理工具 简介2 Graylog
  • ★ C++基础篇 ★ vector 类
  • Java 8 Stream API 实现各种数据类型的转换
  • 10、stm32实现adc读取数据
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • @jsonView过滤属性
  • [NodeJS] 关于Buffer
  • 2017前端实习生面试总结
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • React Transition Group -- Transition 组件
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • storm drpc实例
  • 基于axios的vue插件,让http请求更简单
  • 一些关于Rust在2019年的思考
  • 主流的CSS水平和垂直居中技术大全
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (1)SpringCloud 整合Python
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (自用)网络编程
  • . Flume面试题
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net通用权限框架B/S (三)--MODEL层(2)
  • @Async注解的坑,小心
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ 蓝桥杯Web真题 ]-布局切换
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序
  • [30期] 我的学习方法
  • [AIGC] SpringBoot的自动配置解析
  • [Android]常见的数据传递方式
  • [Avalon] Avalon中的Conditional Formatting.
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配
  • [C++]C++类基本语法