免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

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

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

关注

评论

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

如何查看github评价

Albert

GitHub

LiteOS调测利器:backtrace函数原理知多少

华为云开发者联盟

架构 内存 函数 LiteOS backtrace

企业级低代码平台的选型和建设思考

李小腾

谁能拯救终将凋落的头发「幻想短篇 21/28」

道伟

28天写作

冲突域和广播域区别,集线器、交换机和路由器对比

批判性思维自修课(三)

石君

28天写作 批判性思维

机器学习·笔记之:Cost Function - Intuition II

Nydia

西少爷肉夹馍的股权纠纷 | 视频号28天(22)

赵新龙

28天写作

凝聚人心并不难,小诀窍让团队跟你一条心

一笑

管理 激励 28天写作

LeetCode题解:200. 岛屿数量,DFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

折腾CUDA环境,搭建TF2开发环境

IT蜗壳-Tango

七日更

微服务转型系列1:农商行数字化转型的烦恼

BoCloud博云

微服务 银行数字化转型 API 服务治理

Serverless Kubernetes:理想,现实与未来

阿里巴巴云原生

Serverless 容器 运维 云原生 k8s

我的算法学习之路

熊斌

学习方法 算法 28天写作

碎碎念之「程序员的时间都花在了哪?」

Justin

设计原则 代码规范 28天写作 技术债

“大禹针”在北江大堤上线,浪潮助力广东水利新基建落地

新基建

28天瞎写的第二百三十一天:一次被骗的故事

树上

28天写作

Java 创建线程有哪些方式

武哥聊编程

Java 多线程 28天写作

个人隐私后续

张老蔫

28天写作

阿里巴巴管理三板斧

Ian哥

28天写作

【JS】预编译

德育处主任

JavaScript 大前端 js 28天写作

云算力挖矿系统开发app,矿机租赁交易平台搭建

v16629866266

创始人去世,股权怎么办?|视频号28天(21)

赵新龙

28天写作

HTTPS实现原理

架构精进之路

https 七日更 28天写作

大数据丨ClickHouse在京东能源管理平台的实践

京东科技开发者

数据库 大数据

扎根CNCF社区贡献五年是怎样的体验?听听华为云原生开源团队的负责人怎么说

华为云开发者联盟

容器 Volcano cncf kubeedge 代码开发

对机器视觉领域的几点看法

JiangX

机器视觉 28天写作

创业失败启示录|老老王上的人生第一课

阿萌

28天写作 创业失败启示录 青城

大数据知识专栏 - MapReduce 的自定义分组求TopN

小马哥

大数据 hadoop mapreduce 七日更

网站自动化任务脚本

Kylin

七日更

低代码:Microsoft Power Platform

lidaobing

低代码 28天写作 Power Platform

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