', 'auto'); ga('send', 'pageview'); 明明白白的赛特 – ssh转发

ssh转发

在 2024-03-11 发布于 工具 分类

什么是SSH Tunnel(SSH隧道)

SSH Tunnel(SSH隧道)是一种通过SSH协议建立的安全加密通道,用于在客户端和服务器之间传输数据。

SSH Tunnel的使用场景

SSH Tunnel(SSH隧道)在多种场景下都能发挥重要作用,确保数据在传输过程中的安全性和隐私性。以下是一些典型的SSH Tunnel应用场景举例:

  1. 访问内部网络资源
  2. 当用户需要从外部网络访问公司内部网络上的特定服务(如数据库、Web应用等),但出于安全考虑,这些服务并未直接对外公开时,可以使用SSH Tunnel来创建一个安全的连接通道。用户通过SSH连接到内部网络中的一台服务器,然后利用这台服务器作为跳板来访问内部网络上的其他资源。

  3. 远程桌面访问

  4. 假设你需要远程访问公司内部的一台计算机的桌面环境,但出于安全考虑,这台计算机并不允许直接的远程桌面连接。你可以通过SSH Tunnel将本地计算机的端口转发到目标计算机的远程桌面端口上,然后通过本地计算机上的远程桌面客户端来访问目标计算机的桌面。

  5. 绕过网络限制

  6. 在某些情况下,网络可能存在限制或防火墙规则,使得某些服务或端口无法直接访问。通过SSH Tunnel,你可以将本地端口转发到远程服务器上允许访问的端口,从而绕过这些限制,实现服务的访问。

  7. 安全的代理访问

  8. 当用户需要使用某些网络服务(如搜索引擎、社交媒体等),但担心网络中的潜在风险(如中间人攻击、数据泄露等)时,可以使用SSH Tunnel创建一个安全的代理连接。用户配置浏览器或其他应用程序使用SSH Tunnel作为代理服务器,所有通过该代理发出的网络请求都将通过SSH加密传输。

  9. 开发测试环境

  10. 在软件开发和测试过程中,开发人员可能需要访问测试环境中的数据库、API等服务。为了确保数据的安全性,可以使用SSH Tunnel来创建安全的连接通道,使得开发人员能够在本地环境中通过SSH Tunnel访问测试环境中的服务。

SSH Tunnel详细介绍

SSH Tunnel可以分为三种类型:本地端口转发(-L)、远程端口转发(-R)和动态端口转发(-D)。

本地端口转发(-L)

本地端口转发允许将本地计算机的端口转发到远程服务器上的某个端口,使得通过本地端口访问的服务实际上是在远程服务器上运行的。这种用法适用于需要从本地计算机访问远程服务器上特定服务的情况。

使用方法

ssh -L [local-port]:[remote-host]:[remote-port] [username]@[remote-host]
  • local-port 本地计算机上的端口号
  • remote-host 远程服务器的主机名或IP地址
  • remote-port 是远程服务器上目标服务的端口号
  • username 是你在远程服务器上的用户名

建立连接后,你可以通过本地端口访问远程服务器上的服务,就像在本地运行一样。

模拟场景的IP地址情况:

  • 本地计算机IP:192.168.1.100
  • 远程服务器IP:10.0.0.1
  • 内部数据库服务器IP:10.0.0.10

场景一:远程访问内部数据库

假设你身处公司外部网络(使用本地计算机192.168.1.100),但需要远程访问公司内部网络上的数据库服务器(IP为10.0.0.10)。由于安全原因,数据库服务器并未直接对外公开,你只能通过公司内部的一台远程服务器(IP为10.0.0.1)来访问。

在这种情况下,你可以使用SSH本地端口转发来创建一个安全的连接通道。具体步骤如下:

  1. 通过SSH连接到远程服务器: bash ssh -L 3307:10.0.0.10:3306 username@10.0.0.1 这条命令将本地计算机的3307端口转发到远程服务器上的10.0.0.10的3306端口(假设数据库使用的是MySQL,默认端口为3306)。

  2. 连接本地数据库客户端: 在本地计算机上,配置你的数据库客户端(如MySQL客户端)使用本地端口3307来连接到数据库。此时,所有通过本地端口3307发出的数据库请求都将通过SSH隧道转发到远程服务器,并最终到达内部数据库服务器。

通过这种方式,你可以安全地从外部网络访问内部数据库,而无需直接暴露数据库服务器的外部访问。

场景二:远程开发环境

假设你是一名开发人员,需要在家里(使用本地计算机192.168.1.100)访问公司的开发环境(包括代码仓库、应用服务器等),而这些资源都部署在内部网络(IP为10.0.0.x)。同样,出于安全考虑,这些资源并未对外直接暴露。

为了解决这个问题,你可以在公司内部的一台服务器上设置一个SSH隧道,将本地计算机的端口转发到内部网络的相关服务上。例如:

  1. 通过SSH连接到远程服务器: bash ssh -L 8080:10.0.0.20:80 username@10.0.0.1 这条命令将本地计算机的8080端口转发到内部应用服务器的80端口(假设应用服务器运行在80端口)。

  2. 访问内部应用: 在本地计算机上,你可以通过浏览器或其他HTTP客户端访问http://localhost:8080来访问内部网络上的应用服务器。所有的HTTP请求都将通过SSH隧道转发到内部应用服务器。

通过SSH本地端口转发,开发人员可以安全地访问公司的内部开发环境,进行代码编辑、调试和测试等工作,而无需担心数据泄露或网络攻击的风险。

远程端口转发(-R)

远程端口转发允许将远程服务器的端口转发到本地计算机的某个端口,使得通过远程端口访问的服务实际上是在本地计算机上运行的。这种用法适用于需要从远程服务器访问本地计算机上特定服务的情况。

通过SSH远程端口转发,开发人员可以方便地在远程服务器上访问和调试本地计算机上的开发环境,而无需将代码或环境部署到远程服务器上。这对于需要频繁进行代码修改和调试的场景特别有用,因为它可以减少代码上传和下载的时间,并允许开发人员直接在本地环境中进行测试和验证。

使用方法

ssh -R [remote-port]:[local-host]:[local-port] [username]@[remote-host]
  • remote-host 远程服务器的主机名或IP地址
  • remote-port 是远程服务器上的端口号
  • local-host 是本地计算机的主机名或IP地址
  • local-port 是本地计算机上目标服务的端口号
  • username 是你在远程服务器上的用户名

建立连接后,通过远程端口访问的服务将映射到本地计算机上的相应服务。

模拟场景的IP地址情况:

  • 本地计算机IP:192.168.1.100
  • 远程服务器IP:10.0.0.1

场景:远程开发和调试

假设你是一名开发人员,正在远程工作,需要从公司的服务器(远程服务器IP:10.0.0.1)上访问和调试你本地计算机(IP:192.168.1.100)上运行的开发环境。

为了解决这个问题,你可以使用SSH远程端口转发将远程服务器上的某个端口转发到本地计算机上运行的开发服务端口。具体步骤如下:

  1. 在本地计算机上启动开发服务,并确保它在某个端口上监听,例如端口8000。

  2. 通过SSH建立连接并进行远程端口转发: bash ssh -R 9000:localhost:8000 username@10.0.0.1 这条命令将远程服务器上的9000端口转发到本地计算机上的8000端口。localhost指的是本地计算机,username是你在远程服务器上的用户名。

  3. 现在,在远程服务器上,其他用户或进程可以通过访问localhost:9000来访问你本地计算机上运行在8000端口的开发服务。

动态端口转发(-D)

这种用法适用于需要为本地计算机上的多个应用程序提供加密代理访问的情况。

使用方法

ssh -D [local-port] [username]@[remote-host]
  • remote-host 远程服务器的主机名或IP地址
  • username 是你在远程服务器上的用户名
  • local-port 是本地计算机上的SOCKS代理端口号

建立连接后,配置本地应用程序使用SOCKS代理,并指定代理服务器的地址为localhost和相应的端口号

场景:安全地访问远程网络资源

假设你身处一个不安全的公共网络环境(如咖啡店、机场等),但你需要安全地访问远程网络上的多个资源(如网站、API服务、数据库等)。为了确保数据传输的安全性,你可以使用SSH动态端口转发来创建一个加密的SOCKS代理。

具体步骤如下:

  1. 通过SSH连接到远程服务器,并启用动态端口转发: bash ssh -D 1080 username@remote-server-ip 这条命令将在本地计算机上创建一个监听在1080端口的SOCKS代理服务器。username是你在远程服务器上的用户名,remote-server-ip是远程服务器的IP地址。

  2. 配置本地应用程序使用SOCKS代理: 一旦SSH连接建立并启用了动态端口转发,你需要配置本地计算机上需要使用代理的应用程序来通过SOCKS代理进行网络访问。具体配置方法因应用程序而异,但通常可以在应用程序的网络设置或代理设置中找到相关选项。

例如,如果你使用的是浏览器,你可以在浏览器的网络设置中将代理服务器配置为localhost:1080,并勾选使用SOCKS代理。

  1. 通过SOCKS代理访问远程资源: 配置完成后,当本地应用程序发起网络请求时,这些请求将通过SSH隧道转发到远程服务器,并从那里安全地访问目标资源。所有流量都将通过SSH连接进行加密传输,从而保护数据免受潜在的网络攻击和窃取。

通过这种方式,你可以在不安全的公共网络环境中安全地访问远程网络资源,而不必担心数据泄露或中间人攻击的风险。SSH动态端口转发为多个应用程序提供了一个统一的加密通道,使得远程访问变得更加安全和便捷。