什么是 SSH 端口转发


SSH端口转发是一种通过SSH连接在远程主机之间建立安全通信的技术。它允许你在两台计算机之间创建一个加密的通信通道,并将网络流量在这个通道中转发。

什么是SSH端口转发,又称SSH隧道?

SSH端口转发是SSH中的一种机制,用于从客户机到服务器机的隧道应用端口,或反之亦然。它可以用来为传统的应用程序添加加密,穿过防火墙,一些系统管理员和IT专业人士用它来从他们的家庭机器打开进入内部网络的后门。它也可能被黑客和恶意软件滥用,以打开从互联网到内部网络的访问。请参阅SSH隧道页面以了解更广泛的概述。

本地转发

本地转发是用来从客户端机器转发一个端口到服务器机器。基本上,SSH 客户端在配置的端口上监听连接,当它收到一个连接时,它将连接"隧道"到 SSH 服务器。服务器连接到一个配置好的目标端口,可能是在一个与SSH服务器不同的机器上。

本地端口转发的典型用途包括:

相当多的组织通过一个单一的跳板机进行 SSH 连接。该服务器可能是一个标准的Linux/Unix盒子,通常有一些额外的加固、入侵检测和/或记录,或者它可能是一个商业跳跃服务器解决方案。

一旦连接得到验证,许多跳板机允许传入端口转发。这种端口转发很方便,因为它允许精通技术的用户相当透明地使用内部资源。例如,他们可以将本地机器上的一个端口转发到公司内部网络服务器,转发到内部邮件服务器的IMAP端口,转发到本地文件服务器的445和139端口,转发到打印机,转发到版本控制库,或者转发到内部网络上几乎任何其他系统。通常,该端口是通过隧道连接到内部机器上的SSH端口。

在OpenSSH中,本地端口转发是通过-L选项配置的

1
ssh -L portA:ip:port [-p sshportB] [-N] [-f] username@hostB

命令解释:

这个命令的作用是,当访问本地的 portA 端口的时候,实际访问的是 ip:port的服务。前提是本地能够和 hostB 进行 ssh 连接

默认情况下,任何人(甚至在不同的机器上)都可以连接到SSH客户端机器上的指定端口。然而,这可以通过提供一个绑定地址来限制在同一主机上的程序:

1
ssh -L 127.0.0.1:portA:ip:port [-p sshportB] [-N] [-f] username@hostB

OpenSSH客户端配置文件中的LocalForward选项可以用来配置转发,而不需要在命令行上指定它。

远程转发

在OpenSSH中,远程SSH端口转发是使用-R选项指定的。例如:

1
ssh -R portA:ip:port -p sshportA username@hostA

远程转发和本地转发的主要区别在于,本地转发在 ssh 客户端(本地)执行 ssh -L命令,远程转发是在远端服务器(跳板机)上执行 ssh -R命令

命令解释:

参考