SSH隧道(客户端的数据加密并通过 SSH 服务器转发到目标服务器)

SSH隧道简介

SSH 隧道(SSH Tunneling)是通过 SSH(Secure Shell)协议创建的安全通道,用于将流量从一个网络传输到另一个网络

SSH 隧道可以用来保护网络数据的传输,通常用于穿越防火墙、隐藏流量、访问受限的网络资源等。

工作原理

SSH 隧道通过 SSH 连接将客户端的数据加密并通过 SSH 服务器转发到目标服务器,或者将目标服务器的数据通过 SSH 服务器加密传输到客户端。

三种类型

本地端口转发(Local Port Forwarding): 客户端将本地端口上的流量转发到远程服务器上的指定端口。

远程端口转发(Remote Port Forwarding): 客户端请求 SSH 服务器将某个远程端口上的流量转发到本地计算机上的指定端口。

动态端口转发(Dynamic Port Forwarding): 使用 SOCKS 代理,客户端可以动态地将任意目的地的流量转发到远程服务器

SOCKS代理:(SOCKS 代理充当客户端与目标服务器之间的中介。客户端将请求发送到 SOCKS 代理服务器,代理服务器再将请求转发给目标服务器,并将目标服务器的响应返回给客户端。这样,目标服务器只会看到来自 SOCKS 代理的请求,而看不到原始客户端的请求)

示例

注意:如果仅进行端口转发,想通过 SSH 隧道访问公司内部的 HTTP 服务,只需要端口转发,不需要在服务器上执行任何命令,三种转发需要在末尾添加-N。

ssh -L 4000:192.168.1.10:80 user@example.com -N
1. 本地端口转发

场景:通过本地端口 8080 访问远程数据库服务器(假设远程数据库服务器只能通过 db.example.com 上的端口 3306 访问)。

ssh -L 8080:db.example.com:3306 user@ssh-server.com

解释

  • -L 表示本地端口转发。
  • 8080 是本地计算机上的端口。
  • db.example.com:3306 是远程数据库服务器及其端口。
  • user@ssh-server.com 是 SSH 服务器及其用户名。
2. 远程端口转发

场景:让远程 SSH 服务器上的端口 9090 访问本地开发服务器(假设本地服务器运行在端口 3000 上)。

ssh -R 9090:localhost:3000 user@ssh-server.com
3. 动态端口转发

场景:使用 SOCKS 代理通过 SSH 隧道进行安全浏览。

ssh -D 8080 user@ssh-server.com

 

实例图

本地端口转发示意图

+---------------------+            +------------------+          +---------------------+
|     Local Client    |            |    SSH Server    |          |    Remote Server    |
|---------------------|            |------------------|          |---------------------|
|  localhost:8080     |<--SSH----->|                  |<-------->|  db.example.com:3306 |
+---------------------+            +------------------+          +---------------------+

远程端口转发示意图

+---------------------+            +------------------+          +---------------------+
|     Local Server    |            |    SSH Server    |          |     Remote Client   |
|---------------------|            |------------------|          |---------------------|
|  localhost:3000     |<--SSH----->|                  |<-------->|   ssh-server.com:9090|
+---------------------+            +------------------+          +---------------------+

动态端口转发示意图 

Client (localhost:8080) --[SOCKS Proxy]--> SSH Server --> Internet
+---------------------+            +------------------+          +---------------------+
|     Local Client    |            |    SSH Server    |          |        Internet      |
|---------------------|            |------------------|          |---------------------|
| SOCKS Proxy :8080   |<--SSH----->|                  |<-------->|      Various Sites   |
+---------------------+            +------------------+          +---------------------+

 finalshell添加隧道

  • 添加隧道

    • 在连接成功后,右键点击左侧连接列表中的目标服务器,选择 "隧道管理" 或 "Tunnels"。
    • 在弹出的隧道管理界面中,可以看到三个选项卡:“本地端口转发”,“远程端口转发”和“动态端口转发”。
  • 配置本地端口转发

    • 选择 “本地端口转发” 选项卡。
    • 点击 “添加” 按钮。
    • 填写本地端口、目标地址和目标端口。例如,要将本地端口 8080 转发到远程数据库服务器(db.example.com:3306),可以填写如下:
      • 本地端口:8080
      • 目标地址:db.example.com
      • 目标端口:3306
    • 点击 “确定” 或 “保存”。

总结

SSH 隧道是一个强大的工具,可以确保数据传输的安全性,提供对受限网络资源的访问,并帮助用户规避网络限制。通过了解本地、远程和动态端口转发,可以灵活地应用 SSH 隧道满足不同的需求。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用SSH隧道连接数据库是一种安全的方式,可以通过加密和身份验证来保护数据库连接。下面是使用SSH隧道连接数据库的步骤: 1. 配置SSH服务器:首先,你需要有一个可用的SSH服务器,可以是远程服务器或者本地机器上运行的SSH服务器。 2. 生成SSH密钥对:在客户端上生成SSH密钥对,包括公钥和私钥。你可以使用ssh-keygen命令生成密钥对。 3. 将公钥添加到SSH服务器:将生成的公钥添加到SSH服务器的授权文件中,通常是将公钥内容添加到~/.ssh/authorized_keys文件中。 4. 配置SSH隧道:在客户端上配置SSH隧道,使用ssh命令来建立隧道连接。例如,如果你要连接到MySQL数据库,可以使用以下命令: ``` ssh -L <本地端口>:<目标数据库地址>:<目标数据库端口> <SSH服务器地址> ``` 其中,`<本地端口>`是你本地机器上用于连接数据库的端口号,`<目标数据库地址>`是目标数据库的地址,`<目标数据库端口>`是目标数据库的端口号,`<SSH服务器地址>`是SSH服务器的地址。 5. 连接数据库:现在你可以使用本地机器上的数据客户端工具来连接数据库了。在连接设置中,将数据库地址设置为`localhost`,端口号设置为步骤4中指定的本地端口号。 注意:在使用SSH隧道连接数据库时,确保SSH服务器数据服务器都是可信任的,并且已经进行了适当的安全配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值