GoTTY - 将您的 Linux 终端 (TTY) 共享为 Web 应用程序
GoTTY 是一个简单的基于 GoLang 的命令行工具,使您能够将终端 (TTY) 共享为 Web 应用程序。它将命令行工具转变为 Web 应用程序。
它使用 Chrome 操作系统的终端模拟器 (hterm) 在网络浏览器上执行基于 JavaScript 的终端。重要的是,GoTTY 运行一个 Web 套接字服务器,该服务器基本上将输出从 TTY 传输到客户端,并接收来自客户端的输入(即,如果允许来自客户端的输入)并将其转发至TTY。
另请阅读:Teleconsole – 与您的朋友共享您的 Linux 终端
其架构(hterm + Web 套接字思想)的灵感来自于 Wetty 程序,该程序支持通过 HTTP 和 HTTPS 进行终端。
先决条件:
您应该在 Linux 中安装 GoLang(Go 编程语言)环境才能运行 GoTTY。
如何在 Linux 系统中安装 GoTTY
如果您已经有可用的 GoLang 环境,请运行下面的 go get 命令来安装它:
go get github.com/yudai/gotty
上面的命令将在您的 GOBIN 环境变量中安装 GoTTY 二进制文件,尝试检查是否是这种情况:
ls $GOPATH/bin/
如何在 Linux 中使用 GoTTY
要运行它,您可以使用 GOBIN env 变量和命令自动完成功能,如下所示:
$GOBIN/gotty
否则,运行 GoTTY 或任何其他 Go 程序,无需输入二进制文件的完整路径,使用下面的 export 命令将 GOBIN 变量添加到 ~/.profile
文件中的 PATH :
export PATH="$PATH:$GOBIN"
保存文件并关闭它。然后获取文件以实现上述更改:
source ~/.profile
运行 GoTTY 命令的一般语法是:
Usage: gotty [options] <Linux command here> [<arguments...>]
现在使用任何命令(例如 df 命令)运行 GoTTY,以从 Web 浏览器查看系统磁盘分区空间和使用情况:
gotty df -h
默认情况下,GoTTY 将在端口 8080 启动 Web 服务器。然后在网络浏览器上打开 URL:http://127.0.0.1:8080/
,您将看到正在运行的命令,就像在终端上运行一样:
如何在 Linux 中自定义 GoTTY
您可以在配置文件 ~/.gotty
中更改默认选项和终端 (hterm),如果该文件存在,它将默认加载该文件。
这是 gotty 命令读取的主要自定义文件,因此,按如下方式创建它:
touch ~/.gotty
并为配置选项设置您自己的有效值(在此处查找所有配置选项)以自定义 GoTTY,例如:
// Listen at port 9000 by default
port = "9000"
// Enable TSL/SSL by default
enable_tls = true
// hterm preferences
// Smaller font and a little bit bluer background color
preferences {
font_size = 5,
background_color = "rgb(16, 16, 32)"
}
您可以使用命令行中的 --index
选项设置自己的 index.html 文件:
gotty --index /path/to/index.html uptime
如何使用 GoTTY 中的安全功能
由于 GoTTY 默认情况下不提供可靠的安全性,因此您需要手动使用下面说明的某些安全功能。
允许客户端在终端中运行命令/键入输入
请注意,默认情况下,GoTTY 不允许客户端在 TTY 中键入输入,它只允许调整窗口大小。
但是,您可以使用 -w
或 --permit-write
选项允许客户端写入 TTY,但由于对服务器的安全威胁,不建议这样做。
以下命令将使用 vi 命令行编辑器打开文件 fossmint.txt 在网络浏览器中进行编辑:
gotty -w vi fossmint.txt
下面是从网络浏览器看到的 vi 界面(像往常一样使用 vi 命令):
使用 GoTTY 进行基本(用户名和密码)身份验证
尝试激活基本身份验证机制,客户端将需要输入指定的用户名和密码才能连接到 GoTTY 服务器。
以下命令将使用 -c
选项限制客户端访问,要求用户提供指定的凭据(用户名:test 和密码:@67890):
gotty -w -p "9000" -c "test:@67890" glances
Gotty 生成随机 URL
限制对服务器的访问的另一种方法是使用 -r
选项。在这里,GoTTY 将生成一个随机 URL,以便只有知道该 URL 的用户才能访问服务器。
还可以使用 -title-format “GoTTY – {{ .Command }} ({{ .Hostname }})” 选项来定义 Web 浏览器界面标题,Glances 命令用于显示系统监控统计信息:
gotty -r --title-format "GoTTY - {{ .Command }} ({{ .Hostname }})" glances
以下是从 Web 浏览器界面中看到的上述命令的结果:
将 GoTTY 与 SSL/TLS 结合使用
因为默认情况下,服务器和客户端之间的所有连接都未加密,所以当您通过 GoTTY 发送秘密信息(例如用户凭据或任何其他信息)时,您必须使用 -t
或 - -tls
选项,在会话上启用 TLS/SSL:
GoTTY 默认情况下会读取证书文件 ~/.gotty.crt
和密钥文件 ~/.gotty.key
,因此,首先创建一个自签名证书使用下面的 openssl 命令作为密钥文件(回答所提出的问题以生成证书和密钥文件):
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/.gotty.key -out ~/.gotty.crt
然后以安全的方式使用 GoTTY,并启用 SSL/TLS,如下所示:
gotty -tr --title-format "GoTTY - {{ .Command }} ({{ .Hostname }})" glances
与多个客户端共享您的终端
您可以使用终端多路复用器与多个客户端共享单个进程,以下命令将使用glances命令启动一个名为gotty的新tmux会话(确保您已安装tmux):
gotty tmux new -A -s gotty glances
要读取不同的配置文件,请使用 -config “/path/to/file” 选项,如下所示:
gotty -tr --config "~/gotty_new_config" --title-format "GoTTY - {{ .Command }} ({{ .Hostname }})" glances
要显示 GoTTY 版本,请运行以下命令:
gotty -v
访问 GoTTY GitHub 存储库以查找更多使用示例:https://github.com/yudai/gotty
就这样!你尝试过吗?你如何找到GoTTY?通过下面的反馈表与我们分享您的想法。