10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

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

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

关注

评论

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

Prometheus 启动时被禁止的功能特性

耳东@Erdong

Prometheus Feature 7月月更

七、HikariConfig初始化分析

阿白

数据库 源码解析 HikariCP 源代码 连接池

新型LaaS协议Elephant Swap给ePLATO提供可持续溢价空间

BlockChain先知

人社部公布“数据库运行管理员”成新职业,OceanBase参与制定职业标准

OceanBase 数据库

设计消息队列存储消息的MySQL表格

joak

Bootstrap 模态框Modal【前端Bootstrap框架】

恒山其若陋兮

7月月更

一、HikariCP源码分析之获取连接流程一

阿白

数据库 源码解析 HikariCP 源代码 连接池

九、HikariCP源码分析之ConcurrentBag二

阿白

数据库 源码解析 HikariCP 源代码 连接池

二、HikariCP源码分析之获取连接流程二

阿白

数据库 源码解析 HikariCP 源代码 连接池

五、HikariCP源码分析之初始化分析二

阿白

数据库 源码解析 HikariCP 源代码 连接池

十一、HikariCP源码分析之HouseKeeper

阿白

数据库 源码解析 HikariCP 源代码 连接池

MIT TR50榜单公布 《麻省理工科技评论》评价毫末智行是AI自动驾驶界的颠覆势能

科技大数据

智能车

互联网基石:TCP/IP四层模型,由浅入深直击原理!

wljslmz

计算机网络 TCP/IP 网络技术 OSI模型 签约计划第三季

7 行代码搞崩溃 B 站,原因令人唏嘘!

Python猫

怎么实现您的个人知识库?

Geek_da0866

面向大数据存算分离场景的数据湖加速方案

Baidu AICLOUD

数据湖 对象存储 元数据 存算分离 层级namespace

八、HikariCP源码分析之ConcurrentBag一

阿白

数据库 源码解析 HikariCP 源代码 连接池

资源集合

贾献华

7月月更

桌面软件开发框架大赏

声网

软件开发

你必须知道的一些JVM技术点

Java学术趴

7月月更

高性能数据访问中间件 OBProxy(三):问题排查和服务运维

OceanBase 数据库

六、HikariConfig配置解析

阿白

数据库 源码解析 HikariCP 源代码 连接池

SQL 改写系列七:谓词移动

OceanBase 数据库

不要再用if-else!

Jackpop

leetcode122. Best Time to Buy and Sell Stock II 买卖股票的最佳时机 II(简单)

okokabcd

LeetCode 数据结构与算法 贪心算法

四、HikariCP源码分析之初始化分析一

阿白

数据库 源码解析 HikariCP 源代码 连接池

数据安全建设

奔向架构师

数据资产 7月月更

推荐 7 个学习 Web3 的开源资源

devpoint

blockchain Solidity web3 7月月更

SpringBoot实现异步任务Async及异步任务实现发送邮件

宁在春

springboot 异步 7月月更 邮件发送

2022中国物流产业大会暨企业家高峰论坛在杭州举办!

联营汇聚

三、HikariCP源码分析之获取连接流程三

阿白

数据库 源码解析 HikariCP 源代码 连接池

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