GoTTY:把你的 Linux 终端放到浏览器里面

Crq
Crq
Crq
1161
文章
0
评论
2024年12月18日05:52:00
评论
11 2724字阅读9分4秒
摘要

GoTTY 是一个简单的基于 Go 语言的命令行工具,它可以将你的终端(TTY)作为 web 程序共享。它会将命令行工具转换为 web 程序。希望对大家有帮助。

它使用 Chrome OS 的终端仿真器(hterm)来在 Web 浏览器上执行基于 JavaScript 的终端。重要的是,GoTTY 运行了一个 Web 套接字服务器,它基本上是将 TTY 的输出传输给客户端,并从客户端接收输入(即允许客户端的输入),并将其转发给 TTY。

它的架构(hterm + web socket 的想法)灵感来自 Wetty项目,它使终端能够通过 HTTP 和 HTTPS 使用。

先决条件

你需要在 Linux 中安装GoLang(Go编程语言)环境来运行 GoTTY。

如何在 Linux 中安装 GoTTY

如果你已经有一个可以工作的 Go 语言环境,运行下面的 go get命令来安装它:

# go get github.com/yudai/gotty

上面的命令会在你的GOBIN环境变量中安装 GOTTY 的二进制,尝试检查下是否如此:

# $GOPATH/bin/

如何在 Linux 中使用 GoTTY

要运行它,你可以使用 GOBIN 环境变量并用命令补全:

# $GOBIN/gotty

另外,要不带完整命令路径运行 GoTTY 或其他 Go 程序,使用export命令将GOBIN变量添加到~/.profile文件中的PATH环境变量中。

export PATH="$PATH:$GOBIN"

保存文件并关闭。接着运行source来使更改生效:

# source ~/.profile

运行 GoTTY 命令的常规语法是:

Usage: gotty [options]  []

现在用 GoTTY 运行任意命令,如df 来从 Web 浏览器中查看系统分区空间及使用率。

# gotty df -h

GoTTY 默认会在 8080 启动一个 Web 服务器。在浏览器中打开 URL:http://127.0.0.1:8080/,你会看到运行的命令仿佛运行在终端中一样:

如何在 Linux 中自定义 GoTTY

你可以在~/.gotty 配置文件中修改默认选项以及终端,如果该文件存在,它会在每次启动时加载这个文件。

这是由 getty 命令读取的主要自定义文件,因此,按如下方式创建:

# 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)"
}

你可以使用命令行中的--html选项设置你自己的index.html文件:

# gotty --index /path/to/index.html uptime
如何在 GoTTY 中使用安全功能

由于 GoTTY 默认不提供可靠的安全保障,你需要手动使用下面说明的某些安全功能。

允许客户端在终端中输入命令

请注意,默认情况下,GoTTY 不允许客户端输入到TTY中,它只支持窗口缩放。

但是,你可以使用-w--permit-write选项来允许客户端写入 TTY,但是并不推荐这么做因为会有安全威胁。

以下命令会使用 vi 命令行编辑器在 Web 浏览器中打开文件fossmint.txt进行编辑:

# gotty -w vi fossmint.txt

以下是从 Web 浏览器看到的 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 }})"选项来定义浏览器标题。glances 用于显示系统监控统计信息:

# gotty -r --title-format "GoTTY - {{ .Command }} ({{ .Hostname }})" glances

以下是从浏览器中看到的上面的命令的结果:

带有 SSL/TLS 使用 GoTTY

因为默认情况下服务器和客户端之间的所有连接都不加密,当你通过 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

按如下所示,通过启用 SSL/TLS,以安全方式使用 GoTTY:

# gotty -tr --title-format "GoTTY - {{ .Command }} ({{ .Hostname }})" glances
与多个客户端分享你的终端

你可以使用终端复用程序来与多个客户端共享一个进程,以下命令会启动一个名为 gotty 的新 tmux 会话来运行 glances(确保你安装了 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 的?通过下面的反馈栏与我们分享你的想法。


作者简介:
Aaron Kili 是 Linux 和 F.O.S.S 爱好者,即将成为 Linux SysAdmin 和网络开发人员,目前是 TecMint 的内容创作者,他喜欢在电脑上工作,并坚信分享知识。


via: http://www.tecmint.com/gotty-share-linux-terminal-in-web-browser/

作者:Aaron Kili 译者:geekpi 校对:wxy

weinxin
我的微信
这是我的微信扫一扫
Crq
  • 本文由 发表于 2024年12月18日05:52:00
  • 转载请注明:https://www.cncrq.com/12190.html
DevOps监控微服务的五原则 Linux教程

DevOps监控微服务的五原则

监控是微服务控制系统的关键部分,你的软件越复杂,那么你就越难了解其性能及问题排障。鉴于软件交付发生的巨大改变,监控系统同样需要进行彻底的改造,以便在微服务环境下表现更好。
Linux 中重置数据库的 root 密码的技巧 Linux教程

Linux 中重置数据库的 root 密码的技巧

其中一项是设置数据库 root 帐户的密码 - 你必须保持私密,并仅在绝对需要时使用。如果你忘记了密码或需要重置密码(例如,当数据库管理员换人或被裁员!),这篇文章会派上用场。
总说Linux,到底什么是Linux? Linux教程

总说Linux,到底什么是Linux?

Linux是最知名和最常用的开源操作系统。作为一个操作系统,Linux是一个软件,位于计算机上的所有其他软件的下面,从这些程序接收请求并将这些请求转发到计算机硬件。
Ubuntu12.04嵌入式交叉编译环境搭建 Linux教程

Ubuntu12.04嵌入式交叉编译环境搭建

在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译,这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: