查看原文
其他

终端爱好者福音:安全加密的远程终端实时共享工具

小秋 开源前哨 2022-09-24

【导语】:通过端到端加密从浏览器查看和控制远程终端的工具。

简介

TermPair 是一个通过端到端加密从浏览器查看和控制远程终端的工具,浏览器远程 + 实时操作命令行。让开发者可以安全地实时共享和控制终端,特别适合服务器非桌面系统的环境。


功能:

  • 实时共享 unix 终端
  • 通过浏览器连接共享的终端,两者保持同步
  • 支持多个浏览器同时连接
  • 运行设置浏览器连接为度读/写或只读权限
  • 安全连接,使用 AES 算法 128 位进行加密
  • 需要安全的 HTTPS 网络环境
  • 允许自己构建 Web 应用
  • 广播终端的尺寸实时发送到浏览器,渲染始终匹配
  • 与 Nginx 一起服务,或者作为 systemd 服务运行

项目地址:

https://github.com/cs01/termpair

可以在该地址试用:

https://chadsmith.dev/termpair

下载安装

只支持 Linux、macOS 系统,需要安装 Python 3.6+ 版本。

下载可执行文件

可以从项目 Github 地址上找到发布页面,直接下载可执行文件运行即可

https://github.com/cs01/termpair/releases

使用 pipx 或 pip 安装

官方推荐使用 pipx 进行安装,它会在隔离环境中进行安装:

> pipx install termpair

或者用 pip 安装:

> pip install termpair

需要注意的是,TermPair 服务器与终端需要使用相同的运行版本。

运行

使用 pipx 直接运行最新版本,无需安装:

> pipx run termpair serve

然后广播分享:

> pipx run termpair share

运行原理

TermPair 由三部分组成,分别是服务器、终端客户、在浏览器客户端中运行的 JavaScript Web 应用程序。

服务器

首先, termpair 服务器启动(termpair serve)。服务器充当路由器,在 TermPair 终端客户端和连接的浏览器之间转发加密数据。服务器侦听来自 unix 终端客户端的 termpair websocket 连接,并维护到任何连接该客户端的浏览器的映射。

终端客户端

当用户想要共享他们的终端时,运行 termpair share 以启动客户端。TermPair 客户端向服务器注册此会话,然后 fork 并启动一个 pty 进程。TermPair 在数据可用时从 pty 的文件描述符中读取数据,然后将其写入真实终端的标准输出,并在此处正常打印。但是,它会加密此输出并通过 websocket 将其发送到服务器。

Web 应用程序

TermPair 客户端在共享会话期间为用户提供唯一的 URL。该 URL 指向 TermPair Web 应用程序(TypeScript/React),该应用程序设置 websocket 连接以接收和发送加密的终端数据。收到数据后,将其解密并写入基于浏览器的终端。

当用户在浏览器终端输入时,在浏览器中用密钥加密,发送到服务器,从服务器转发到终端,然后在终端通过TermPair 解密。最后,TermPair 客户端将其写入 pty 的文件描述符。

加密

TermPair 客户端在启动时会创建三个 128 位 AES 加密密钥:

  • 第一个用于将终端的输出发送到服务器之前对其进行加密。
  • 第二个用于将用户输入发送到服务器之前对其进行加密。
  • 第三个是浏览器用来解密来自广播终端的初始连接响应的“引导”密钥,其中包含用第三个密钥加密的上述两个密钥。浏览器通过服务器无法访问的部分 url 或通过用户手动输入获取此引导程序密钥。没有使用像 Diffie-Hellman 这样的密钥协商算法,因为多个浏览器可以连接到终端,这会增加 TermPair 代码库的复杂性。不过,未来可能会考虑某种形式的 DH。


- EOF - 


更多优秀开源项目(点击下方图片可跳转)




开源前哨

日常分享热门、有趣和实用的开源项目。参与维护10万+star 的开源技术资源库,包括:Python, Java, C/C++, Go, JS, CSS, Node.js, PHP, .NET 等

关注后获取

回复 资源 获取 10万+ star 开源资源



分享点赞在看

支持我们分享更多优秀开源项目,谢谢!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存