开源项目 gotty 可以将命令行工具转为Web方式运行,稍微开下脑洞就可以找到很多可利用的点。
比如把 top 和 iotop 资源占用监控集成到一个页面上作为大屏展示。
$ cat d/a.html<html><frameset cols="50%,50%"><frame src="http://192.168.10.23:9000" ><frame src="http://192.168.10.23:9001" ></frameset></html>

gotty 只是将指定的程序映射到web上,当程序退出后,连接会断开。相对于直接 ssh 访问服务器,通过终端窗口形式监控服务器状态,权限会限定在监控程序,相对比较安全。

gotty 的项目地址为:
https://github.com/sorenisanerd/gotty
gotty 是用 go 语言编写的,在 Release 页面提供了编译好的二进制文件,下载后可以直接运行。

运行时直接将需要执行的命令行工具跟在 gotty 后面即可
gotty -p 8000 htop

默认 gotty 会启用 8080 端口,可以使用 -p 指定端口。

如果需要长时间进行监控,可以开启一个 screen 会话,在会话中执行 gotty,并为不同的监控程序指定不同的端口。
默认 gotty 提供的 web 程序不接受输入,如果需要接受用户输入,可以在命令行中加入 -w 参数。
gotty -p 8000 -w top
当提供 -w 参数后,gotty 此时将程序的输入输出全部映射到了 web端,此时存在一定的安全风险。如果不是把监控程序映射至 web,而是将 bash 这种交互式程序映射至 web,此时所有访问网页的人都可免认证访问服务器,比如使用如下命令:
gotty -p 8000 -w bash
此时在网页上就可操作服务器

如果是在安全可控的环境下,此方式可以用来当教学,一人操作,其他人通过web 围观。但直接把操作权限映射至匿名访问的网络上还是非常危险的,所以 gotty 提供了其它安全选项。
安全选项
-r 随机字符,在端口后生成一串随机字符串作为访问的 URL
-c 加用户密码认证
带随机字符串的 URL 类似如下:

如果不知道随机字符串,只通过端口是无法访问的,直接访问会报"
404 page not found"。完整的命令如下:
$ gotty -p 8000 -w -r bash2022/04/18 21:40:01 Alternative URL: http://192.168.10.23:8000/g8t1vb7w/
第二种方式是通过 -c user:pass 指定用户名和密码,为网页加一个简单的认证,当访问网页时会弹出认证页面:

用户名和密码是在参数中由用户指定的,完整的命令如下:
gotty -p 8000 -w -c user:YorPassWord bash
总结
相对于传统 ssh 终端形式访问服务器,gotty 为服务器管理提供了一种新的选择,通过 web 的形式运行命令行程序,可以用来作监控,也可以在网页上直接操作 shell,能直接把 bash 、zsh 搬到 web 上。特别是一些输入不方便的场景,比如手机,gotty 可以将 web 变成屏幕。
最后给出一个将 tmux 映射到 web 的例子作为结束。
gotty -p 8000 -w -c user:pass tmux





