一文彻底搞懂ssh的端口转发

这篇具有很好参考价值的文章主要介绍了一文彻底搞懂ssh的端口转发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

端口转发是突破网络域隔离的一个手段。在学习这个知识的时候需要不断自问

  • 为什么需要端口转发?
  • 应用场景是什么呢?

什么是端口转发?

SSH 隧道或 SSH 端口转发可以用来在客户端和服务器之间建立一个加密的 SSH 连接如下图,通过它来把本地流量转发到服务器端,或者把服务器端流量转发到本地。

比如从本地访问服务器上的 MySQL 管理后台,或者把本地的服务暴露在公网上。
比如从公网上访问你家里的的NAS或图书馆.

端口转发分为本地端口转发和远程端口转发.

本地端口转发

本地端口转发的语法

# ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
# 这时 SSH 客户端会监听本地的端口 LOCAL_PORT,把所有发给改端口的 TCP 连接都发给指定的服务器,
#然后再连接到目标机器。这个目标机器通常是服务器自己,也可以是任何其他机器。在目标机器看来,
#这个请求来自 SSH 服务器,相当于连到了服务器的内网。

场景1

例如你被封在家,想连接到公司的数据干活。IT部门只给了你一个跳板机172.16.1.60。 你在家里用笔记本连上wifi就可以连上这个机器。 这个机器是公司外网的出口。这也是做过一次NAT转换的。
现在你可以连接数据库了,可是跳板机上没有你习惯使用的工具,例如navicat. 此时在不麻烦it同时的前提下你可以通过远程端口转发来解决这个问题. (如果公司网路有堡垒机或者其他网络隔离设备可能会禁掉)

大致架构如下
一文彻底搞懂ssh的端口转发

需要做的就是将远程的数据库3306上的服务通过对外的跳板机映射到本地,你就可以使用navicat连接数据库了。

在你本地的git bash中或者powershell执行以下命令

ssh -N -L -f 3301:192.168.122.76:3306 172.16.1.60

这个ssh命令的意思是所有跟3301端口的TCP数据传输都会直接通过ssh通过在服务器172.16.1.60 上转发给数据库服务器(192.168.122.76:3306)。
也就是说将本地的3301 端口应到了内网的3306端口。
一文彻底搞懂ssh的端口转发
至此你就可以使用navicat连接本地的3301 端口连接远程数据库服务了.

场景二

一文彻底搞懂ssh的端口转发

ssh -L参数解释

一文彻底搞懂ssh的端口转发

ssh 远程端口的安全问题

这里3301 并不是打错了。毕竟3306 是个知名端口。如果有人扫描到你的机器3306是开启的,可能会发起攻击影响内网的数据库服务, 所以一般都会伪装一个端口。例如你去阿里上买一个rds. 数据库连接一般都有不是原生端口?

远程端口转发

“远程端口转发”(remote forwarding)当然是指绑定远程端口的转发
将远程(ssh 服务器)机器上的端口转发到本地(ssh 客户端)机器上的端口,然后再转发到目标机器上的端口。

远程端口转发的语法

#[REMOTE:]REMOTE_PORT- 远程 SSH 服务器上的 IP 和端口号。空的REMOTE意味着远程 SSH 服务器将绑定到所有接口。
#DESTINATION:DESTINATION_PORT- 目标机器的 IP 或主机名和端口。
#[USER@]SERVER_IP- 远程 SSH 用户和服务器 IP 地址。
ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER

场景一

场景如下图,外网可以访问内部的一个服务,在任何有网络的地方(而不再限制在某台主机上,应用更广泛)都可以访问你的服务啦。

注意:
在公网上需要放行安全组8888这个端口。
在10.0.0.4上执行远程端口转发命令,该主机和公网22端口可达。(其实只要求公网能ssh到10.0.0.4就可以了,企业里面一般都是出口松进口严)
一文彻底搞懂ssh的端口转发

ssh -R 8888:10.0.0.3:8080 44.11.22.33

远程端口转发和本地端口转发要在哪台服务器上执行

本地: 就在你本地就可以了
远程: 在中转服务器上执行。

场景二

一文彻底搞懂ssh的端口转发
一文彻底搞懂ssh的端口转发

ssh -R 参数解释

一文彻底搞懂ssh的端口转发

端口转发的选项

-N 代表不开启ssh连接,会启动一个阻塞的进程,直到 Ctrl-C 手动终止掉。
-L 参数来做本地端口转发。
-f 后台启用
-g 实现网关功能(GatewayPorts yes)

端口转发需要修改哪些ssh配置

无论是本地端口转发还是远程端口转发,都需要在服务器上配置 。
这个参数一般好像都关闭的.

/etc/ssh/sshd_config:

GatewayPorts yes

如果长时间保持连接,那么还需要开启:

TCPKeepAlive yes

顾名思义 TCPKeepAlive 运行在 TCP 层,通过发一个空包来保持连接。如果你的服务器有复杂的防火墙,或者本地所在的网络运营商比较奇怪,这个包可能会被丢掉。这时可以用 ServerAliveInterval 60 来在 SSH 协议一层保持连接。方便起见这些参数也可以在建立连接时指定,比如:

ssh -L 8080:localhost:33062 harttle@mysql.example.com -o TCPKeepAlive=true ServerAliveInterval=60

也可以装一个 autossh 包,让它来托管 ssh 服务,这样会更稳定:

autossh -NR 8080:localhost:32400 harttle@example.com

以上 ssh 命令都可以在 Linux 或 MacOS 下工作,如果在 Windows 下也有其他的选择。比如你安装了 WSL,那么可以在 WSL 里执行上述命令。也可以安装一个 SSH 客户端,比如在 PuTTY 下可以在“连接->SSH->隧道”里相应地设置本地和远程端口、IP。

开机自动建立隧道

在 Linux 下可以把上述命令直接写成一个 systemd 脚本,可参考 使用 systemd 管理 Node.js 应用 一文;在 Windows 下可以利用任务计划程序建立一个任务,如果本地安装有 WSL,可以添加一个 Action 设置命令为 wsl 参数为

autossh -NR 8080:$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):32400 example.com

注意 WSL2 启用了 HyperV 运行在某个子网下,宿主机器的 IP 是不确定的,需要用 cat /etc/resolv.conf | grep nameserver | awk ‘{print $2}’ 来获得 WSL 宿主机器的 IP。

参考

【1】 ssh配置优化
【2】windows创建隧道文章来源地址https://www.toymoban.com/news/detail-421081.html

到了这里,关于一文彻底搞懂ssh的端口转发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文带你彻底搞懂Nginx反向代理

    举一个通俗的例子,因为众所周知的原因,我们无法访问谷歌,但是因为某些原因,我们必须要访问谷歌,这时候我们会买一个“梯子”,既然我们无法直接访问谷歌,我们就去麻烦“梯子”帮助我们访问。 事实上我们还是没法访问谷歌,只是这个“梯子”能够访问,它只是

    2024年02月04日
    浏览(45)
  • 一文彻底搞懂流水线加法器

    目录 1.流水线加法器应用场景 2.流水线加法器本质原理(与普通加法器区别) 3.流水线加法器实现 4.流水线加法器代码Verilog代码实现 首先最重要的是明白我们流水线加法器是什么,我们其实对于流水线其实并不陌生,我们常常可以听到说工厂中存在流水线,他是一种工业上

    2024年02月08日
    浏览(121)
  • 一文彻底搞懂BJT及其放大特性(图解说明)

    前置知识:PN结 一文彻底搞懂PN结及其单向导电性(图解说明)-CSDN博客 BJT的基本结构如上图所示,在左侧是宽度较窄,浓度非常高的N型离子参杂。中间是非常窄的P型离子参杂。而左侧是浓度较低的N型离子参杂。 在N型参杂区和P型参杂区之间会形成PN结,因此BJT实际上内部是

    2024年02月08日
    浏览(41)
  • 一文彻底搞懂Kafka如何保证消息不丢失

    Producer:生产者,发送消息的一方。生产者负责创建消息,然后将其发送到 Kafka。 Consumer:消费者,接受消息的一方。消费者连接到 Kafka 上并接收消息,进而进行相应的业务逻辑处理。 Consumer Group:将多个消费者组成一个消费者组,一个消费者组可以包含一个或多个消费者。

    2024年04月22日
    浏览(42)
  • ArcGIS|一文彻底搞懂GIS图斑编号

    实际工作中,经常会有对各类图斑进行编号的需求。数据中图斑数比较少时,我们可以手动进行编号,但数据量较大时就必须得想办法自动实现图斑编号。今天,将分享几种常见的图斑自动编号方式,主要包括: 图斑顺序编号、按字段属性分类编号、按图斑四至位置编号、分

    2024年02月11日
    浏览(230)
  • 一文彻底搞懂Nginx的.conf文件路径配置

    前言:最近在Nginx上部署Vue项目,同时还存了一些静态资源,但我查了好久都没找到一篇详细介绍路径配置的文章,因此就根据我有限的经验写了这篇文章,希望能够对读者有所帮助 如下图所示,这是我配置好的一个server代码块,我这里配置了https,所以会比默认的多一部分

    2024年02月09日
    浏览(43)
  • 一文彻底搞懂ZAB算法,看这篇就够了!!!

    最近需要设计一个分布式系统,需要一个中间件来存储共享的信息,来保证多个系统之间的数据一致性,调研了两个主流框架Zookeeper和ETCD,发现都能满足我们的系统需求。其中ETCD是K8s中采用的分布式存储,而其底层采用了RAFT算法来保证一致性,之前已经详细分析了Raft算法的

    2024年02月01日
    浏览(44)
  • SSH 端口转发

    本文用于记录一下 SSH 端口转发功能的学习笔记,以做备忘,主要参考文章如下: 彻底搞懂SSH远程转发命令 SSH端口转发 An Illustrated Guide to SSH Tunnels SSH 不仅可以远程登录,还有一个非常实用的功能:端口转发。 SSH 端口转发又叫 SSH 隧道(tunnel),是在 SSH 连接的基础上,通过

    2024年02月07日
    浏览(90)
  • ssh做端口转发

    主机1能访问外网, 主机2 不能访问外网 外部主机想要访问主机2 在主机1和主机2之间建隧道。 在主机1上做本地端口转发。可以用ssh来做本地端口转发(转发到远端)。 方法: 在(本地)主机1上执行 ssh -C -f -N -g -L 10.0.8.3:18888:10.0.8.4:8888 lighthouse@10.0.8.4                      

    2024年02月12日
    浏览(42)
  • 一文让你彻底搞懂AQS(通俗易懂的AQS)

    AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。当然,我们自己也能利用AQS非常轻松容易地构造出符合我们自己需求的

    2024年02月17日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包