把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

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:153200
用户头像

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

关注

评论

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

中国智能汽车腾飞,为什么异构算力是第一生产力?

脑极体

异构计算

升华产品管理以提高业务敏捷性

ShineScrum

淘宝商品详情API返回值中的预售与定制信息

技术冰糖葫芦

api 网关 API Gateway API 文档 API 测试 pinduoduo API

mcgs笔记 设备窗口 通讯状态

万里无云万里天

自动化 HMI mcgs

Flink Forward Asia 2024 议题征集令|探索实时计算新边界

阿里云大数据AI技术

flink 实时计算 FFA

VMware Avi Load Balancer 30.2.2 发布下载,新增功能概览

sysin

负载均衡 vmware 应用交付 AVI

AI话中秋,移动高清超高清技术描绘家庭娱乐“新画卷”

最新动态

咸宁等保测评机构在哪里?电话多少?

行云管家

等保 等级保护 等保测评 咸宁

TDengine 签约寓信科技,推动智慧公寓的数字化转型

TDengine

数据库 tdengine

京东广告投放平台整洁架构演进之路

京东零售技术

架构 代码

Datadog 监控最佳实践 | 收集正确的数据

巴辉特

监控 可观测性 监控系统 运维监控 开源监控

TiDB 扩容过程中 PD 生成调度的原理及常见问题丨TiDB 扩缩容指南(一)

PingCAP

每日必抢小程序下单总结

阿里技术

小程序 支付宝 购物 夸克

构建智能电商新生态:深度解析京东商品详情API的力量

代码忍者

API 测试 pinduoduo API

低代码平台搭建CRM系统实现公海客户自动分配

低代码小观

低代码开发 低代码平台 低代码搭建crm系统

一文让你明白手游行业需要堡垒机的必要性

行云管家

网络安全 数据安全 堡垒机 手游

以 Buycbuy为蓝本:淘宝微店代购集运系统搭建秘籍

tbapi

淘宝代购系统 淘宝代购集运系统 华人代购系统 逆向海淘系统 代购商城系统

mcgs笔记 设备窗口 快速连接变量

万里无云万里天

自动化 HMI mcgs

多项政策扶持与流量激励,华为音乐空间音频创作者获全链路支持

最新动态

实时分析都靠它→揭秘YashanDB列式存储引擎的技术实现

YashanDB

列式存储 yashandb 崖山数据库

PingCAP 荣登 2024 Cloud 100 China 第七名

PingCAP

【YashanDB知识库】YAS-02025 no free space in virtual memory pool

YashanDB

yashandb 崖山数据库 yashandb知识库

mcgs笔记 画面 由全屏回到缩小的窗口状态

万里无云万里天

自动化 HMI mcgs

阿里巴巴拍立淘API:实时图像搜索与快速响应的技术探索

代码忍者

API 测试 pinduoduo API

全面方位了解桌面管理

Geek_a83400

【YashanDB知识库】DBeaver无法访问数据库

YashanDB

yashandb 崖山数据库

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