网站搜索

GoTTY - 将您的 Linux 终端 (TTY) 共享为 Web 应用程序


GoTTY 是一个简单的基于 GoLang 的命令行工具,使您能够将终端 (TTY) 共享为 Web 应用程序。它将命令行工具转变为 Web 应用程序。

它使用 Chrome 操作系统的终端模拟器 (hterm) 在网络浏览器上执行基于 JavaScript 的终端。重要的是,GoTTY 运行一个 Web 套接字服务器,该服务器基本上将输出从 TTY 传输到客户端,并接收来自客户端的输入(即,如果允许来自客户端的输入)并将其转发至TTY

另请阅读:Teleconsole – 与您的朋友共享您的 Linux 终端

其架构(hterm + Web 套接字思想)的灵感来自于 Wetty 程序,该程序支持通过 HTTPHTTPS 进行终端。

先决条件:

您应该在 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?通过下面的反馈表与我们分享您的想法。