jsiwa / sql

0 stars 0 forks source link

SSH 隧道 #19

Open jsiwa opened 1 week ago

jsiwa commented 1 week ago

SSH 隧道(SSH Tunneling),也称为 SSH 端口转发,是通过安全的 SSH 协议创建一个加密的连接,来转发本地或远程的端口流量。它主要用于在不安全的网络环境中安全地访问远程服务,或者绕过防火墙的限制。

SSH 隧道的类型

SSH 隧道有三种主要类型:

  1. 本地端口转发(Local Port Forwarding): 通过将本地端口的流量转发到远程主机的指定端口,实现对远程服务的安全访问。

  2. 远程端口转发(Remote Port Forwarding): 将远程服务器端口的流量转发到本地主机的指定端口,实现从远程服务器访问本地服务。

  3. 动态端口转发(Dynamic Port Forwarding): 将本地端口作为 SOCKS 代理,动态地将流量转发到不同的远程主机和端口。

1. 本地端口转发

本地端口转发用于将本地端口的流量通过 SSH 隧道转发到远程主机上的指定端口。常见应用场景是通过 SSH 隧道访问远程数据库、Web 服务器等。

示例

假设你有一台远程服务器 remote-server.com,上面运行着 MySQL 数据库,监听端口为 3306。你可以通过以下命令创建本地端口转发:

ssh -L 3307:localhost:3306 username@remote-server.com

完成上述命令后,你可以通过访问本地的 3307 端口来连接远程服务器上的 MySQL:

mysql -h 127.0.0.1 -P 3307 -u your_mysql_user -p

2. 远程端口转发

远程端口转发用于将远程服务器上的端口流量通过 SSH 隧道转发到本地机器上的指定端口。常见应用场景是通过远程服务器访问本地的服务。

示例

假设你在本地机器上运行一个 Web 服务器,监听端口为 8080。你可以通过以下命令创建远程端口转发:

ssh -R 9090:localhost:8080 username@remote-server.com

完成上述命令后,你可以通过访问远程服务器上的 9090 端口来访问本地机器上的 Web 服务器。

3. 动态端口转发

动态端口转发用于创建一个 SOCKS 代理,通过该代理动态转发流量到不同的远程主机和端口。常见应用场景是绕过防火墙或访问被限制的资源。

示例

假设你希望通过远程服务器 remote-server.com 作为代理访问网络资源。你可以通过以下命令创建动态端口转发:

ssh -D 1080 username@remote-server.com

完成上述命令后,你可以将本地应用程序(如浏览器)的代理设置为 127.0.0.1:1080,通过该 SOCKS 代理访问网络。

使用 SSH 隧道的安全性

SSH 隧道通过 SSH 协议加密所有流量,确保数据在传输过程中不被窃听或篡改。同时,通过使用 SSH 密钥验证,可以进一步增强连接的安全性。

总结

SSH 隧道是一种强大的工具,可以在不安全的网络环境中安全地访问远程服务。通过本地端口转发、远程端口转发和动态端口转发,可以满足不同的访问需求。了解和掌握 SSH 隧道的使用方法,可以大大提高网络连接的安全性和灵活性。

jsiwa commented 1 week ago

当然,我会逐步解释这个 SSH 命令 ssh -Nf -L 19000:12.1.1.1:9000 user 中每个部分的含义。

命令概览

ssh -Nf -L 19000:12.1.1.1:9000 user@hostname

详细解释

-N

-N 选项告诉 SSH 不执行远程命令,只进行端口转发。这在只需要创建一个隧道时非常有用。通常用于端口转发或创建一个 SSH 隧道,不需要在远程主机上执行命令。

-f

-f 选项让 SSH 进入后台运行。一旦 SSH 验证成功并建立连接后,它就会把任务转移到后台,以便当前终端可以继续使用。这与 -N 选项一起使用非常常见,因为你不需要执行任何命令,只需保持隧道打开。

-L 19000:12.1.1.1:9000

-L 选项定义了本地端口转发。格式是 local_port:remote_host:remote_port

这意味着所有发送到本地 localhost:19000 的流量将通过 SSH 隧道转发到远程主机 12.1.1.1 的端口 9000

user@hostname

完整命令示例:

ssh -Nf -L 19000:12.1.1.1:9000 user@remote-server.com

实际使用

  1. 执行命令: 在终端中运行上述命令。

    ssh -Nf -L 19000:12.1.1.1:9000 user@remote-server.com
  2. 验证连接: 你现在可以在本地访问 localhost:19000,实际流量会通过 SSH 隧道转发到 12.1.1.1:9000

例子

假设远程服务器 remote-server.com 上有一个服务在 IP 12.1.1.1 和端口 9000 上运行。你想在本地通过 localhost:19000 访问该服务,可以使用:

ssh -Nf -L 19000:12.1.1.1:9000 user@remote-server.com

这会在本地创建一个监听端口 19000,所有发送到这个端口的数据会通过 SSH 隧道转发到远程服务器上的 12.1.1.1:9000