写点什么

MoSH——移动设备上的 Shell

  • 2012-05-16
  • 本文字数:1810 字

    阅读完需:约 6 分钟

Mobile Shell ,或简称为 _MoSH_,在 GitHub 上发布,是移动设备上 SSH 的替代品。阐释 MoSh 背后的原则的技术论文将在下月召开的 2012 USENIX 年度技术会议上发布。

下述两个重要特性是 MoSH 有别于其它类似产品的:

  • 第一,连接的 IP 地址不可知;而不是采用 TCP/IP 连接,数据通过 UDP/IP 发送。好处是,如果移动设备无信号或设备的 IP 地址改变(因为移动设备可以在 WiFi 网络和蜂窝网络间漫游),那么在传输层保持有状态连接就不那么可靠。
  • 第二,MoSH 没有在客户端与服务器之间提供一个透明的加密字节流,让服务器通过重绘屏幕来响应的机制;MoSH 客户端提供了一个本地 echo 的变体。这意味着,当用户通过键盘输入了一个‘X’,MoSH 不会通过客户端将‘X’发送给服务器,再由服务器传输回客户端在屏幕上显示这种方式,而是立即在客户端屏幕上显示‘X’。

这两个改变显然与层次架构的连接流,如 SSH,区别明显;SSH 提供了只在两个端点之间的加密字节流,然后要远程服务器程序重绘屏幕。因为 SSH 完全不知道连接各个端点如何使用数据,任何击键都至少要在客户端与服务器间往返一次才能显示。

MoSH 在服务器创建一个进程,运行于用户空间,监听 UDP 包。然后将服务器地址(和 UDP 端口)告知 MoSH 客户端,并通过以数据包的形式发送数据来初始化连接。然而,因为连接本身在网络层是无状态的,如果客户端 IP 地址发生变化,则 UDP 包可以来自一个不同的 IP 地址(发送给同一服务器)而不会失去连接。

采用 UDP,而非 TCP,同样意味着 MoSH 客户端 / 服务器需要各自管理状态。连接中的每一个数据包都有一个自增长的数字,同时客户端和服务器都建立一个已知数据包的列表,当需要的时候 MoSH 库会重新发送数据包。(这基本上就是 TCP 原理的精髓。)也因为如此 MoSH 客户端可以在不同的 IP 地址或(将来)在 IPv4 与 IPv6 之间切换。服务器端的 IP 地址必须保持不变。

通过 MoSH 连接发送的数据包采用 AES-128 OCB 模式加密。该加密算法提供了采用固定密钥的加密端点,密钥在服务器启动时生成,并在连接信息中显示:

复制代码
<pre>
$ mosh-server
MOSH CONNECT 60004 4NeCCgvZFe2RnPgrcU1PQw
</pre>

虽是新方法,但 AES-128 OCB 已经出现了一段时间,并且该算法作者指出他们正在邀请更进一步的审查

你们的安全数据报协议已经通过专家审核了吗?

还没有。MoSH 开始被越来越多的使用,并且代码被有强烈安全意识的加密极客阅读过,他们认为 MoSH 的设计是合理的,但是任何新的数据报协议都要自我证明其安全性,SSP 也不例外。我们使用了 AES-128 和 OCB 的参考实现,同时我们也欢迎人们来审阅代码。我们认为设计的简单性是个显著的优势,然而,当然别人也可能认为这是错误的。我们毫不怀疑需要花些时间(这是当然的!)才能让安全社区对 MoSH 的安全性感到满意。

另一个重大改变是在客户端与服务器进程间同步屏幕状态。绝大多数时候,当用户输入一个字符后(比如字符‘X’),希望看到 X 显示在屏幕上;并且当他们按下退格键,用户希望字符被立即删除。对于上 / 下 / 左 / 右键来说也类似,通常要移动一个字符。

为了达到这个目标,MoSH 服务器存储了一个客户端的模拟屏幕(反之亦然),并基于在“正常”情况下按键是否会改变屏幕显示来 _ 预测 _。如果预测失效,MoSH 客户端将会等待与服务器间往返的时间以确认屏幕显示状态(本质上说是减少老的 SSH 机制),但如果 MoSH 确信击键会引发屏幕更新,那么 MoSH 将会直接在本地显示。在类 shell 环境中(大部分击键都要回显),这将会减少服务器端引起的感知延迟,另外也可减少网络发送的传输量,因为击键可以批量发送,而非像大多数交互式连接那样每次按键发送一个数据包。

一个限制是输入只支持 UTF-8,因为多次按键可以转化为单一字符(反之亦然)。MoSH 不是要试图解决所有的编码和输入法的问题,而只专注于 UTF-8 并保证其工作正常。更多细节可参考技术信息页面。

MoSH 带来了一种在移动设备和服务器间连接的新方法。每个客户端连接使用一个单独的 UDP 端口(UDP 必须在两个端点间可达),然而通道是用私钥加密。因为连接可以转换到其它 IP 地址上,自然会引发对于连接可能被侵入的担忧,并且事实上“连接”在客户端断开后仍可保持对一些人来说也值得担心。

然而,它的优势,特别是提高了响应时间的感知,可能激发人们关注这个系统。同时因为两边的进程都是用户进程,MoSH 可以很容易的安装在已有的环境中,而无需提升权限进行安装。

查看英文原文: MoSH - The Mobile Shell

2012-05-16 00:152966
用户头像

发布了 32 篇内容, 共 95322 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

开课倒计时 | 3月1-2日,DeepSeek时代下的可观测性(Observability)认证培训

雅菲奥朗

可观测性 Observability 可观测性认证 DeepSeek

大型复杂项目管理怎么结合传统与敏捷

易成研发中心

ISIVISI SLURP for Mac(数字合成器) v1.1.4激活版

小玖_苹果Mac软件

YashanDB访问控制

YashanDB

数据库 yashandb

MindIE BenchMark

zjun

人工智能

星环科技无涯·问知 AI PC版接入DeepSeek,一键部署 让你的AI永不掉线

星环科技

星环科技推出DeepSeek全场景解决方案:即开即用、企业级部署、端侧智能三位一体

星环科技

BOE(京东方)重磅发布ADS Pro新品 携手创维打造比OLED更好的Mini LED电视新品A5F Pro

爱极客侠

Product Hunt 金喵奖 Voice AI 项目一览;AI 招聘平台 Mercor 再融资,估值 20 亿美元 丨日报

声网

YashanDB自动选主

YashanDB

数据库 yashandb

YashanDB用户管理

YashanDB

数据库 yashandb

GO 进行编译时插桩,实现零码注入

观测云

Go

议题征集|“纵深防护·极智运营”第十期「度安讲」 技术沙龙议题报名!

百度安全

新机8999元起售,OPPO“叫板”华为三星?

趣解商业

apple OPPO 数码

2025年,前端攻城狮要怎么整活?

伤感汤姆布利柏

Steinberg VST Live Pro for mac (终极现场演出系统) v2.2.0激活版

小玖_苹果Mac软件

掌握这个API,让你的网页展示效果提升10倍

Immerse

小红书湖仓架构的跃迁之路

StarRocks

Kazrog Avalon VT-747SP for Mac(模拟动态处理器) v1.0.5激活版

小玖_苹果Mac软件

YashanDB身份认证

YashanDB

数据库 yashandb

YashanDB加密方法

YashanDB

数据库 yashandb

YOLOv5 的量化及部署 - RGB 专题

地平线开发者

自动驾驶 算法 地平线征程6

『Python底层原理』--Python属性的工作原理

不在线第一只蜗牛

Python

Native Instruments Massive X for Mac(原始声音合成器) v1.4.6激活版

小玖_苹果Mac软件

Arturia Analog Lab V Pro for Mac(模拟实验室) v5.11.0直装激活版

小玖_苹果Mac软件

深思考发布鸿蒙系统TinyDongni&deepseek超小端侧多模态大模型

科技热闻

MoSH——移动设备上的Shell_移动_Alex Blewitt_InfoQ精选文章