固定 UDP 端口、决定断开后的会话还能等多久、让脚本在 shell 之前先跑。
「UDP 端口或范围(可选)」留空时,mosh-server 会在自己默认的 60000–61000 里挑一个端口。平时没问题,但如果所在的网络只放行了少数几个 UDP 端口,就会变成「SSH 登录成功、UDP 数据包却过不来」。
把这一栏填上,Term 会原样交给 mosh-server -p:可以是单个端口(60000),也可以是一段范围(60000:61000)。填防火墙真正放行的那几个,服务端就只在里面挑。这一栏在主机编辑页的「连接方式」里,选了 Mosh 才会出现。
60000:60010,也就是给这台主机留了 11 个端口。上面那行是应用自带的提示:主机上要装 mosh-server,登录仍然走 SSH。两端都得是 1–65535 之间的端口号,而且前一个不能大于后一个。写错了当场拦下:输入框下面直接给出提示,改对或清空之前这台主机保存不了。
60000:60010:9 不是合法范围,输入框下面直接回答「请输入端口(1–65535)或范围,如 60000:61000」;改成端口、范围或者留空之前,保存都是灰的。mosh 会话比应用活得久:退出 Term、断网、把手机收起来,主机上的 mosh-server 还在那儿等客户端回来。这正是 mosh 的价值所在 —— 同时也是主机上会攒下一堆再没人连回去的 mosh-server 的原因。
设置 → 终端 → Mosh 会话超时 决定这个「失联窗口」有多长:1 天、3 天、5 天、1 周(默认)、1 个月,或者永不。Term 把它作为 MOSH_SERVER_NETWORK_TMOUT 交给服务端,超过这个时长没收到客户端的消息,mosh-server 自己退出。选「永不」就回到 mosh 原本一直等下去的行为。这项设置对之后新开的会话生效。
走 SSH 时,主机的启动脚本是在第一个提示符出现之后「敲」进去的,老办法。走 Mosh 时它根本不用敲:它被写进 mosh-server 的启动参数,作为 mosh 初始化脚本,由服务端在 shell 启动之前执行。
这带来三点实际差别。它不会再跟登录横幅、MOTD 抢时机,因为它压根不跟提示符打交道。一行 cd /srv/app 或 export EDITOR=vim 会留在你随后进入的那个 shell 里,而不是在一个已经打完提示符的 shell 里跑一遍。而 tmux new -A -s main 这样的脚本,连上就自动接回会话 —— 连接交给 mosh,工作交给 tmux。
这一项没有开关,但值得知道。终端里的 TUI 程序靠问终端「你的背景色是什么」(OSC 11)来判断深色还是浅色,而 mosh 会把这个查询丢掉 —— 它传的是一屏画面,不是字节流,问出去没有回音。所以在原本的 mosh 会话里,vim 之类只能靠猜,还常常猜反。
于是 Term 干脆主动告诉它:连接时把 COLORFGBG 和 COLORTERM=truecolor 写进会话的环境变量,认这两个变量的程序自己就能选对背景。这个值是连接那一刻取的 —— 之后再切换应用的深浅色,要重新连接才会带上新值。
这两项设置在会话里都看得见:pgrep 能看到 mosh-server 实际是用什么命令行起来的,-p 就在里面;超时在环境变量里,单位是秒 —— 604800 就是一周。
# mosh-server 实际的启动命令行 pgrep -af mosh-server | tail -1 # Term 交给服务端的超时(秒) echo TM=[$MOSH_SERVER_NETWORK_TMOUT]
mosh-server new -s -c 256 -p 60000:60010 … 里的正是主机编辑页填的范围,TM=[604800] 就是 1 周换算成秒。参考: 常见问题 —— 怎么连 mosh · mosh.org