什么是 SSH 端口转发
SSH端口转发是一种通过SSH连接在远程主机之间建立安全通信的技术。它允许你在两台计算机之间创建一个加密的通信通道,并将网络流量在这个通道中转发。
什么是SSH端口转发,又称SSH隧道?
SSH端口转发是SSH中的一种机制,用于从客户机到服务器机的隧道应用端口,或反之亦然。它可以用来为传统的应用程序添加加密,穿过防火墙,一些系统管理员和IT专业人士用它来从他们的家庭机器打开进入内部网络的后门。它也可能被黑客和恶意软件滥用,以打开从互联网到内部网络的访问。请参阅SSH隧道页面以了解更广泛的概述。
本地转发
本地转发是用来从客户端机器转发一个端口到服务器机器。基本上,SSH 客户端在配置的端口上监听连接,当它收到一个连接时,它将连接"隧道"到 SSH 服务器。服务器连接到一个配置好的目标端口,可能是在一个与SSH服务器不同的机器上。
本地端口转发的典型用途包括:
- 通过跳板机进行隧道会话和文件传输
- 从外部连接内网的一个服务
- 通过因特网连获取远程共享文件
相当多的组织通过一个单一的跳板机进行 SSH 连接。该服务器可能是一个标准的Linux/Unix盒子,通常有一些额外的加固、入侵检测和/或记录,或者它可能是一个商业跳跃服务器解决方案。
一旦连接得到验证,许多跳板机允许传入端口转发。这种端口转发很方便,因为它允许精通技术的用户相当透明地使用内部资源。例如,他们可以将本地机器上的一个端口转发到公司内部网络服务器,转发到内部邮件服务器的IMAP端口,转发到本地文件服务器的445和139端口,转发到打印机,转发到版本控制库,或者转发到内部网络上几乎任何其他系统。通常,该端口是通过隧道连接到内部机器上的SSH端口。
在OpenSSH中,本地端口转发是通过-L选项配置的
|
|
命令解释:
- portA: 访问本地的 portA ,相当于访问 ip:port 的服务
- ip:port: 这个 ip:port 必须是 hostB 能够访问到的
- -p sshportB: hostB 的 ssh 服务端口
- -N: 不执行命令,只做端口转发
- -f: 后台运行
这个命令的作用是,当访问本地的 portA 端口的时候,实际访问的是 ip:port
的服务。前提是本地能够和 hostB 进行 ssh 连接
默认情况下,任何人(甚至在不同的机器上)都可以连接到SSH客户端机器上的指定端口。然而,这可以通过提供一个绑定地址来限制在同一主机上的程序:
|
|
OpenSSH客户端配置文件中的LocalForward选项可以用来配置转发,而不需要在命令行上指定它。
远程转发
在OpenSSH中,远程SSH端口转发是使用-R选项指定的。例如:
|
|
远程转发和本地转发的主要区别在于,本地转发在 ssh 客户端(本地)执行 ssh -L
命令,远程转发是在远端服务器(跳板机)上执行 ssh -R
命令
命令解释:
- hostA: hostA 实际上是本地(但是一般本地是没有公网地址的,也就是说一般远程转发用不上)
- portA: 在本地上访问 portA ,就相当于访问 ip:port 服务
- ip:port: 实际想访问的服务,必须是跳板机可以访问到的服务
- -p sshportA: 本地的 ssh port