SSH工具
FinalShell 在 macOS 上怎么做端口转发?最新版手把手教你
我在日常开发和测试中,经常需要访问部署在远程服务器上的各种服务,比如数据库、Web 管理界面或者一些内部API。但这些服务往往出于安全考虑,并不会直接暴露在公网上。这时候,FinalShell 的端口转发功能就成了我的得力助手,尤其是在 macOS 上使用 FinalShell 4.6.20 这个版本,操作起来又快又方便。

什么是端口转发,为啥要用它?
简单来说,端口转发(Port Forwarding)就像是给你的网络请求开辟了一条秘密通道。它能让你通过本地的一个端口,去访问远程服务器上的另一个端口。
举个例子,你本地电脑运行着一个浏览器,想访问远程服务器上一个只监听在 localhost:8080 的 Web 服务。如果直接访问服务器IP:8080肯定是不行的,因为这个服务只在服务器内部可用。通过端口转发,你可以在本地配置一个端口(比如 localhost:9999),当浏览器访问 localhost:9999 时,FinalShell 就会把请求转发到远程服务器的 localhost:8080 服务上。这样,你就像直接在服务器上操作一样,方便快捷。
主要有两种类型:
- 本地端口转发(Local Port Forwarding):把远程服务器上的服务映射到你的本地电脑上。这是最常用的一种,我们本地访问远程服务就靠它。
- 远程端口转发(Remote Port Forwarding):把本地电脑上的服务映射到远程服务器上。这种场景相对少见,但如果你想让外部用户通过远程服务器访问你本地的某个服务,就会用到它。
FinalShell 在 macOS 上配置本地端口转发
现在,我们以 FinalShell 4.6.20 在 macOS 上的操作为例,手把手教你如何设置本地端口转发。
1. 新建或编辑会话
首先,打开你的 FinalShell 客户端。在左侧的会话树中,选中你想要进行端口转发的服务器连接。如果你还没有连接,可以新建一个 SSH 连接。右键点击该连接,选择“属性”或者直接双击进入连接详情。
在弹出的会话属性窗口中,你会看到很多选项卡,找到并点击顶部的“隧道”选项卡。这里就是我们配置端口转发规则的地方。
2. 添加本地转发规则
进入“隧道”选项卡后,你会看到左侧有一个“本地端口转发”的列表。
-
点击新增按钮:在“本地端口转发”区域的左下角,你会看到一个绿色的加号按钮,点击它。
-
填写转发规则:
- 本地监听地址:一般填
127.0.0.1或者0.0.0.0。如果填127.0.0.1,只有你本机能访问;填0.0.0.0则其他与你本机同网络的设备也能通过你的 IP 访问。这里我们填127.0.0.1。 - 本地监听端口:这是你本地电脑上用于监听的端口,比如
9999。确保这个端口在你本地没有被其他程序占用。 - 目标服务器:填写远程服务器上实际提供服务的 IP 地址,通常是
127.0.0.1(代表服务器自身)。如果你想转发到远程服务器局域网内的其他机器,就填那台机器的内网 IP。 - 目标端口:这是远程服务器上服务的实际端口,比如
8080。
举例:你想通过
localhost:9999访问远程服务器的127.0.0.1:8080,那就填: 本地监听地址:127.0.0.1本地监听端口:9999目标服务器:127.0.0.1目标端口:8080 - 本地监听地址:一般填
-
保存并连接:配置完成后,点击右下角的“保存”按钮。然后连接到你的服务器。只要 SSH 会话保持连接,端口转发就会一直生效。
3. 测试转发效果
连接成功后,你可以打开你的浏览器或者使用 curl 命令来测试端口转发是否生效。
在 macOS 的终端里输入:
curl http://localhost:9999
如果一切正常,你应该能看到远程服务器上 8080 端口服务的响应内容。这意味着你的本地应用已经成功通过 FinalShell 隧道连接到了远程服务!
如果你对 SFTP 文件传输感兴趣,可以看看这篇文章:/blog/finalshell-sftp-file-transfer/。
FinalShell 在 macOS 上配置远程端口转发
远程端口转发的配置过程与本地转发类似,只是方向相反。它的主要作用是让远程服务器可以通过某个端口访问你本地的服务。
1. 依然是会话属性里的“隧道”选项卡
在 FinalShell 的会话属性窗口,同样进入“隧道”选项卡。这次我们关注的是“远程端口转发”区域。
2. 添加远程转发规则
-
点击新增按钮:在“远程端口转发”区域的左下角,点击绿色的加号按钮。
-
填写转发规则:
- 远程监听地址:通常是
127.0.0.1或者0.0.0.0。0.0.0.0表示远程服务器的所有网络接口都可以监听此端口,即外部用户可以通过远程服务器的公网IP访问你的本地服务。出于安全考虑,建议先填127.0.0.1。 - 远程监听端口:远程服务器上用于监听的端口,比如
8888。 - 目标服务器:填写你本地电脑的 IP 地址,通常是
127.0.0.1。 - 目标端口:你本地电脑上服务的实际端口,比如你本地运行了一个
PythonWeb 服务监听在5000端口。
举例:你想让远程服务器通过
localhost:8888访问你本地的127.0.0.1:5000,那就填: 远程监听地址:127.0.0.1远程监听端口:8888目标服务器:127.0.0.1目标端口:5000 - 远程监听地址:通常是
-
保存并连接:保存规则并连接服务器。此时,远程服务器上的程序可以通过访问
localhost:8888来访问你本地的5000端口服务了。如果远程监听地址填的是0.0.0.0,并且远程服务器的防火墙也允许,那么外部用户就可以通过远程服务器的公网IP:8888来访问你本地的服务。
配置 FinalShell 连接时,有一些高级设置可能对你有帮助,比如SSH密钥配置:/blog/finalshell-ssh-key-configuration/。
常见问题
在使用 FinalShell 进行端口转发时,你可能会遇到一些小麻烦,这里列举几个常见问题和解决办法。
1. 端口被占用怎么办?
问题描述:在设置本地监听端口时,FinalShell 提示端口被占用,导致无法启动转发。 解决办法:
- 更换端口:最直接的方法是换一个未被占用的端口。通常三位数以上的端口(如
9000以上)被占用的概率较低。 - 查找占用进程:在 macOS 终端中使用
lsof -i :端口号命令(例如lsof -i :9999)来查找哪个进程占用了该端口,然后你可以选择关闭该进程或更换端口。
2. 转发连接不上或拒绝连接?
问题描述:设置好转发规则后,访问本地端口却连接不上,或者报错“Connection refused”。 解决办法:
- 检查 SSH 连接状态:确保 FinalShell 到远程服务器的 SSH 会话是正常连接的。如果 SSH 断开,转发自然失效。
- 检查目标服务是否运行:确认远程服务器上的目标服务(比如 Web 服务或数据库)确实在监听你设置的目标端口,并且正常运行。可以使用
netstat -tulnp | grep 目标端口在远程服务器上检查。 - 检查远程防火墙:远程服务器的防火墙(如
firewalld或ufw)可能会阻止 SSH 隧道访问目标端口。你需要确保防火墙允许来自127.0.0.1(或你设置的目标 IP)的连接到目标端口。通常,如果 SSH 隧道在服务器内部转发,防火墙问题较少,但如果是目标服务器填了远程内网IP,则需检查远程服务器到目标内网机器的防火墙。 - 检查目标服务绑定地址:有些服务可能只绑定在
127.0.0.1,如果你在 FinalShell 配置时将目标服务器填成了远程服务器的公网 IP,也会导致问题。请确保与目标服务绑定的地址一致。
3. FinalShell macOS 版安装问题?
问题描述:FinalShell 在 macOS 上安装后打不开,或者提示“无法验证开发者”。 解决办法:
- 系统偏好设置:在“系统设置” -> “隐私与安全性”中,找到“安全性”部分。如果 FinalShell 是从非 App Store 下载,可能会被 macOS 阻止。点击“仍要打开”或“允许”按钮即可。
- 命令行授权:如果仍然无法打开,可以尝试在终端中使用
xattr -cr /Applications/FinalShell.app(假设 FinalShell 安装在 Applications 目录)命令来移除隔离属性,然后再次尝试打开。
了解如何在 Windows 上安装 FinalShell 也很重要,可以参考这篇指南:/blog/finalshell-windows-install-guide/。此外,FinalShell 的端口转发还有更多高级用法,比如多级端口转发:/blog/finalshell-port-forwarding-guide/
延伸阅读
若需进一步查阅,可先看本站以下教程: