博客

tTerm 现在能在浏览器里用了

此前,tTerm 一直在 Telegram 里:直接在聊天中向服务器发送命令。今天我们推出 tTerm Web,一个真正的浏览器终端。你所有的服务器和电脑都在一个标签页中,每条命令自成一个块,设备上无需任何密钥。

这就是 tTerm Web:左侧是按项目分组的机器,顶部是标签页,每条命令自成一个块。

已经有机器人了,为什么还要浏览器

手边只有手机时,机器人很好用:重启服务、查看磁盘、回答安装程序的提问。但较长时间的工作需要大屏幕:多个标签页并排,全屏的 vim 和 htop,还有能轻松找到昨天那条命令的历史记录。

这正是 tTerm Web 的用途。它可以在任何浏览器中打开,笔记本、平板或手机都行,你用来工作的设备上什么都不用安装。

每条命令自成一个块

在普通终端里,所有内容都混在一个输出流中,你得用眼睛找出一条命令在哪里结束、下一条从哪里开始。在 tTerm 中,每条命令都自成一个块:命令本身、输出、退出码、耗时、目录和 git 分支。

块可以连同输出一起复制、折叠或重新运行。命令运行时,输出会实时显示;命令结束后,块会固定为普通文本,方便选中和复制。

像编辑器一样的输入行

底部有一个独立的输入行。Shift+Enter 换行,历史中的命令会以灰色提示,Tab 用于补全。历史记录保存在我们这边,所以在你所有设备上都是一样的。

输入行上方会显示你当前所在的位置:目录和分支。点击它们,从列表中选择另一个,cd 或 git switch 就会作为普通的块运行。遇到那种执行后就无可挽回的危险命令,tTerm 会再确认一次。

vim、htop 和 sudo

全屏程序会占满整个终端区域,照常工作,sudo 也一样。如果你不想要块,还有经典模式:一个连续的终端,和你习惯的一样。

关掉标签页,终端不会关闭

终端运行在我们的服务器上,而不是你的浏览器里。在服务器上构建到一半时合上笔记本:构建会继续,输出也会保留。在另一台设备上打开 tTerm,终端就在那里。

不同项目的标签页并排打开,并带有项目代号:P/web-01、A/api-prod。Cmd+K 打开命令面板:切换到任意终端、在任意机器上新开一个,或执行某个操作。

如何连接机器

Linux 服务器只需一条命令即可连接。添加机器时 tTerm Web 会显示这条命令,你在服务器上运行它:

$ curl -sSL https://connect.tterm.net/s/… | sudo sh

安装程序会在服务器上创建一个名为 tterm 的用户,在它的 authorized_keys 中添加一行,并在 /etc/sudoers.d 中用单独的文件给它 sudo 权限。它不会改动 sshd_config,不会重启 sshd,也不会开放任何端口。几秒钟后,服务器就会出现在你的列表中。

macOS 或 Linux 电脑通过一个小型代理连接。代理以你的用户身份运行,主动连接我们的服务器,因此不需要任何入站端口,电脑也可以位于 NAT 之后。卸载代理只需一条命令。

安全

我们会连接你的机器,所以我们把访问权限设计得既容易授予,也同样容易收回。

  • 不需要你的密钥。每次连接时,tTerm 都会签发一张新的 SSH 证书,里面写着你的名字。它只对这一台服务器有效,两分钟后失效。
  • 签名独立进行。我们用于签名的密钥存放在一个不联网的独立进程中。主程序无法读取它们,只能请求签名,每次签名都会记录在案。
  • 没有中间人。tTerm 服务器位于欧盟。页面和终端直接连到它:Cloudflare 只负责我们的 DNS,看不到你的命令。
  • 收回很容易。在 tTerm 中删除服务器,它会自行撤销在这台服务器上的访问权限;如果服务器没有响应,tTerm 会显示在服务器上完成这一步的命令。安装程序设置的其他内容如何清除,写在脚本本身的开头。
  • 开源。tTerm Web 和代理以 AGPL-3.0 许可证开源。安装脚本很短,运行之前值得读一读。

费用

tTerm Web 公测期间对所有人免费。

50每人可添加的机器
24可同时打开的终端
30含输出的历史记录保留天数

付费方案以后才会推出,我们会提前很久通知你。

机器人怎么办

@tTermNetBot 会保留并继续运行:手边只有手机时,可以直接在聊天中向服务器发送命令。目前机器人和网页版是分开的,各有自己的机器列表。以后我们会把它们合并。

接下来

下一个重点是团队协作:项目中的角色、共享的命令日志,以及旁观同事的终端,被旁观的人始终能看到谁在看。目前还不支持 Windows 电脑,我们以后会支持。

试用 tTerm Web

用邮箱登录:你会收到一个验证码,之后在你自己的设备上只需输入一个短码。第一台服务器一分钟就能连上。

免费开始使用

博客中的更多文章

全部文章
全部文章