MXterm Pro

MXterm Pro 的 SSH 端口转发面板:本地 -L 规则与缺少的功能

Henry AGI
阅读约 5 分钟
Terminal on the SSH tab port forwarding panel: a local forward to port 5432, then psql, and a note that closing the panel keeps the forward

MXterm Pro 有一个 Mac 上的 SSH 端口转发图形界面,但功能很窄:它是已打开 SSH 标签页上的一个面板,只能添加和取消本地(-L)转发,目标是服务器上的 127.0.0.1。没有远程(-R)或 SOCKS 选项,也不保存规则。它适合转发数据库或管理界面,不适合要长期保留的隧道。本文讲这些限制,不从零讲 SSH 隧道。

MXterm Pro 的端口转发面板能做什么?

MXterm Pro 的面板可以在标签页已经打开的 SSH 连接上添加和取消本地端口转发。它不会再开一个连接,也不要求你重新登录。每条规则都会作为控制命令发给正在运行的 ssh 进程,所以转发走的就是你正在输入命令的那个会话。

入口在 SFTP 面板里,它停靠在 SSH 标签页旁边,也就是用来浏览和编辑文件的远程文件面板。面板标题栏里的按钮,提示文字是 SSH 端口转发与隧道管理器,点开后的窗口标题是 SSH 端口转发与隧道。普通 shell 分屏没有 SFTP 面板,所以也没有转发按钮。

每个 SSH 标签页运行的都是系统的 ssh,带 ControlMaster=auto 和共享的 ControlPath。启动会向这个 master 发送 ssh -O forward -L <spec>,停止会发送 ssh -O cancel -L <spec>。

面板脚注写的是“所有转发流量均由 SSH 加密”。这句话在通常意义上成立:它就是 ssh -L 给你的那种 OpenSSH 转发,加密方式相同,并不是另一套传输。

怎么添加本地转发,它对应哪条命令?

在 MXterm Pro 里,名称、本地端口、远程端口三个字段会变成已打开连接上的一条 -L 转发,例如 ssh -O forward -L 127.0.0.1:5432:127.0.0.1:5432。没有目标主机字段,也没有方向开关。下面的步骤假定这台主机已经保存在 SSH 管理器里(见 SSH 和 SFTP 文档)。

1. 把主机作为 SSH 标签页打开。Shift+Cmd+H 打开 SSH 管理器,点连接会打开一个运行系统 ssh 的标签页。像平时一样在终端里登录。这个登录就是转发要用的连接。

2. 点 SFTP 面板标题栏里的转发按钮。在添加新端口转发下填名称(占位提示是 Postgres 5432)、本地端口和远程端口,再点添加规则。端口必须在 1 到 65535 之间,超出范围会在 ssh 看到之前就报错拒绝。

3. 点规则上的启动。只有 ssh 接受了这条转发,标识才会从已停止变成运行中。

如果 ssh 拒绝,它自己的报错文字会以红色显示在列表上方,标识仍是已停止。点停止会取消转发。删除一条运行中的规则会发送同样的取消命令,但取消失败时这一行照样消失,也不会显示任何错误。

本地端口填 5432、远程端口填 5432 时,应用会向该标签页的连接发送 ssh -O forward -L 127.0.0.1:5432:127.0.0.1:5432,连接地址是 <user>@<host>。让 psql 或你的数据库客户端连 Mac 上的 127.0.0.1:5432,流量就会从服务器的 5432 端口出来。

通用形式是 127.0.0.1:<local>:127.0.0.1:<remote>。

相关指南在 Mac 上管理 50 多台 SSH 服务器和云主机

转发能指向哪里?只能是服务器上的 localhost

MXterm Pro 面板创建的每条规则,目标都是 SSH 服务器眼里的 127.0.0.1。这能覆盖服务器本机上的 Postgres、Redis 或管理界面。它到不了服务器背后的第三台机器,比如 db.internal:5432,因为表单里没有目标主机字段,代码替你填的就是 127.0.0.1。

规则行显示的是 127.0.0.1:<local> → <server>:<remote>,右边是你服务器的地址。把它理解为“服务器本机的 <remote> 端口”。转发仍然止于服务器自己的本机回环地址,不是别的网卡。

Mac 这一端同样是固定的。转发规格里明确把本地端口绑定到 127.0.0.1,所以 ~/.ssh/config 里的 GatewayPorts yes 也没法把转发出来的数据库端口公开到你的网络。只有这台 Mac 上的程序能连上它。

要连第三台主机,请在普通 shell 分屏里自己输入转发:ssh -L <local>:db.internal:5432 <user>@<bastion>。那是在真实终端里运行的普通 OpenSSH。

关掉面板不会停止转发

关闭 MXterm Pro 的面板不会取消正在运行的转发。转发属于标签页背后的 SSH 连接,不属于面板里的列表。面板只在打开时才挂载,关闭按钮只负责关闭,没有发送 -O cancel 的清理步骤。只有停止和删除按钮能取消单条转发。

关闭整个共享连接,也会结束其上所有转发:文件面板里的重置连接按钮(服务器拒绝登录或强制改密码时出现)会这样做,在 SSH 管理器里修改主机的连接设置,或删除、重新添加主机,也一样。

规则处于运行中时关掉面板再打开,列表是空的,而端口仍可能在监听。

转发会监听多久,由 OpenSSH 决定,不是应用。-O forward 和 -O cancel 是发给复用 master 的命令。ssh_config 手册说明,ControlPersist 会让这个 master 在最后一个会话关闭后继续留在后台,空闲(没有客户端连接)达到设定时间后才结束。

这里每个 SSH 标签页启动时都带 ControlPersist=10m,也就是 10 分钟。

因为 master 一直持有连接,这样添加的转发可以比标签页活得更久,所以关掉 SSH 标签页不一定会立刻结束它。Windows 上的表现尚未验证。

要检查有没有残留的转发,用 lsof -iTCP:<port> -sTCP:LISTEN 看这个端口上是否仍有监听。

要去掉它,就在应用所用的同一个 master 上取消:ssh -o ControlPath=$HOME/.mxterm/sockets/%r@%h:%p -p <port> -O cancel -L 127.0.0.1:<local>:127.0.0.1:<remote> <user>@<host>。端口、用户和主机要和 SSH 管理器里保存的完全一致(端口除非你改过,否则是 22)。

如果连接已经不在,启动会失败,并显示 ssh 自己的报错,通常是 Control socket connect(...): No such file or directory。把主机在 SSH 标签页里重新打开,再点启动。面板不会重连转发,代码里也没有任何地方会在 ssh 首次接受转发之后再检查“运行中”标识。发现会话掉线属于 keepalive 的问题,见 SSH 超时指南。

MXterm Pro 的端口转发不能做什么

MXterm Pro 的界面只提供本地(-L)转发:没有远程转发选项,没有动态 SOCKS 代理,也没有目标主机字段。规则不保存,所以重新连接后什么都不会恢复。

面板还需要一个已打开的 SSH 标签页。按钮在 SFTP 面板里,而 SFTP 面板只出现在 SSH 标签页旁边,转发又需要该标签页打开的那条连接。本地 shell 分屏,或者还没连接的已保存主机,都没有可转发的连接。

在 Windows 上,请把隧道当作未测试。MXterm Pro 的 SSH、SFTP 和隧道代码依赖 HOME 变量和 OpenSSH 的 ControlMaster,应用文档把这个组合在 Windows 上标为尚未验证。隧道代码用 HOME 拼出套接字路径。没有它,启动会提示找不到 ssh master。

转发在代码里没有套餐上限:面板没有 Pro 检查,规则数量也没有限制。真正会碰到它的 Free 限制是 SSH 主机列表,Free 默认只能保存 5 台主机。

什么时候用面板,什么时候自己输入 ssh?

想快速转发到服务器本机上的东西,比如数据库、Redis 或内部网页,就用面板,不用离开当前会话就能启动和停止。需要第三台主机作目标、反向转发、SOCKS 代理,或者想留着下次用的规则时,就自己输入 ssh。

MXterm Pro 的分屏是真正的终端,在普通分屏里输入带 -L、-R 或 -D 的 ssh 命令,行为和任何运行 OpenSSH 的地方一样。应用不会管理、列出或保存这些转发。它们通常和那个 ssh 进程活得一样久,除非你自己的 ~/.ssh/config 打开了带 ControlPersist 的 ControlMaster。

跨 SSH 连接的完整示例,见在 SSH 会话旁运行 Ollama。

想试的话,把已保存的主机作为 SSH 标签页打开,从 SFTP 标题栏打开转发面板,给一个你本来手动转发的端口添加一条规则。如果它满足你的情况,多开的那个 ssh -L 窗口就可以省掉。如果你需要的不止是转发到服务器本机的本地转发,就继续自己输入 ssh。

自己跑起来试试

多分屏 SSH、Command Recipes(Cmd+J)和多 Agent 的 Control Room (原 War Room):先免费用。

下载 MXterm Pro

已经有 MXterm Pro?阅读设置指南 →

第一次了解 MXterm Pro?查看价格 →

常见问题

SSH 本地端口转发是什么?MXterm Pro 的面板支持吗?

SSH 本地端口转发就是 OpenSSH 的 -L 选项:ssh 手册的描述是,把本机上的连接转发到远端的指定主机和端口。MXterm Pro 的面板支持它,但只支持本地转发,且只能在已打开的 SSH 标签页上用。目标始终是服务器上的 127.0.0.1,所以 Mac 上的 127.0.0.1:<local> 会连到服务器上的 <remote>。

MXterm Pro 支持远程(-R)或 SOCKS(-D)端口转发吗?

面板不支持。界面只创建本地(-L)转发,目标始终是服务器上的 127.0.0.1。你仍可以在普通 shell 分屏里输入带 -R 或 -D 的 ssh 命令,因为分屏是真正的终端。不过那是普通 OpenSSH:MXterm Pro 不会列出、保存或停止这些转发。

MXterm Pro 会保存我的端口转发规则吗?

不会。MXterm Pro 的规则列表只在面板打开期间存在,所以每次打开都是空的,重新连接后也不会恢复任何东西。关掉面板不会取消正在运行的转发。需要把端口还回来,就用 lsof 检查,或用 ssh -O cancel 取消。

能转发到服务器背后另一台机器上的数据库吗,比如 db.internal:5432?

MXterm Pro 的面板不行。目标主机固定为服务器眼里的 127.0.0.1,所以只能访问服务器本机上的服务。要连它背后的机器,请在普通 shell 分屏里自己输入转发,例如 ssh -L <local>:db.internal:5432 <user>@<bastion>。

MXterm Pro 端口转发面板里点启动,显示“No such file or directory”怎么办?

这是该主机没有已打开的连接时 ssh 自己给出的报错,转发无处可挂。先在 SSH 标签页里打开这台主机并登录,再点启动。面板会原样显示 ssh 的报错文字,不会藏起来,标识仍是已停止。

网络里的其他电脑能连上 MXterm Pro 转发出来的端口吗?

通过 MXterm Pro 的面板不能。它明确把本地端绑定到 127.0.0.1,所以只有同一台 Mac 上的程序能连,即使你的 ~/.ssh/config 设置了 GatewayPorts,或者你平时习惯加 -g。你自己输入的转发,则按你给的选项来。

MXterm Pro 在 Windows 上能用 SSH 隧道吗?

尚未验证。SSH、SFTP 和隧道功能依赖 HOME 变量和 OpenSSH 的 ControlMaster,应用自己的文档把它们在 Windows 上标为尚未验证。Windows x64 版本可以下载,但 Authenticode 未签名。没有自己验证之前,不要在 Windows 上依赖这个转发面板。

问问 AI:MXterm Pro 怎么样

根据本页内容,在 ChatGPT、Claude 或 Perplexity 里直接生成回答。回答由 AI 写,不是我们写的,请核对它引用的来源。

发送的问题MXterm Pro 的 SSH 端口转发面板能做什么,不能做什么?