GoTTY 使用指南:如何将终端分享到 Web 端

文章首发于个人公号:「阿拉平平」

最近正值项目上线,项目采用微服务架构并通过 K8s 落地,但某个服务启动后始终存在问题,于是开发要求进入容器排查。从运维的角度而言,开发不应该连接线上环境的服务器,于是我找到了 GoTTY。

项目介绍

GoTTY[1] 是一个基于 Golang 开发的 WebTTY。通过 GoTTY 执行的命令,其结果不会在终端输出,而是显示到 Web 端。本文将介绍 GoTTY 的使用方法。

下载安装

根据系统,下载对应的最新包,这里我下载的版本为 v1.0.1。

[root@localhost ~]# wget https://github.com/yudai/gotty/releases/download/v1.0.1/gotty_linux_amd64.tar.gz

解压并移动到 $PATH 中:

[root@localhost ~]# tar -zxf gotty_linux_amd64.tar.gz
# 注意解压后的文件是否有可执行权限,没有的话要加上
[root@localhost ~]# chmod +x gotty
[root@localhost ~]# mv gotty /usr/local/bin/

查看 GoTTY 的版本:

[root@localhost ~]# gotty --version
gotty version 1.0.1

使用说明

安装好后,让我们来看看要如何使用 GoTTY。

基本用法

GoTTY 的使用非常简单,方法如下:

USAGE:
   gotty [options] <command> [<arguments...>]

只需在要执行的命令前加上 gotty,GoTTY 便会创建网络连接,并监听 8080 端口。以查看磁盘空间为例:

[root@localhost ~]# gotty df -h
2021/06/22 15:00:00 Server is starting with command: df -h
2021/06/22 15:00:00 URL: http://127.0.0.1:8080/
2021/06/22 15:00:00 URL: http://[::1]:8080/
2021/06/22 15:00:00 URL: http://192.168.128.134:8080/
2021/06/22 15:00:00 URL: http://[fe80::7246:6047:4d9f:84b6]:8080/
2021/06/22 15:00:00 URL: http://192.168.122.1:8080/

之后通过浏览器就可以查看结果:

在这个例子中,我们只是简单用了下 GoTTY,并未加入任何选项。GoTTY 其实支持很多选项,其中不乏一些实用的功能,我将选取一些进行介绍。

Web 端赋权

大家实际操作时会发现,在不加任何选项的情况下,Web 端的功能非常有限,但是加入一些选项就可以赋予其额外的权力。

  • Web 端可写

通过 GoTTY 打开的网页默认只有只读权限,但在某些场景下,Web 端会要求可写。此时,加上 --permit-write-w 选项就可以允许其可写。

比如,编辑某个文件可以这样执行命令:

[root@localhost ~]# gotty -w vi test.txt

接下来就可以从 Web 端编辑文件了:

  • Web 端传参

除了赋予 Web 端可写的权力,GoTTY 也支持加入 --permit-arguments 允许从 Web 端传参。

以常用的 top 命令为例,方法如下:

[root@localhost ~]# gotty --permit-arguments top

比如要调整显示的间隔时间,可以在 URL 的末尾加上 arg 传参:

# 设置 top 的间隔时间为 1 秒,等价于 top -d 1
/?arg=-d&arg=1

安全性

在之前的示例中,我们对 Web 端的访问可以说是毫无限制,这无疑存在安全隐患。GoTTY 中还有一些选项可以增加访问的安全性。

  • 身份验证

通过 --credential-c 选项可以开启身份验证。

[root@localhost ~]# gotty  -c admin:admin df

开启验证后,从 Web 端访问必须输入指定的用户名和密码。

  • 随机 URL

GoTTY 还可以通过 --random-url-r 选项在 URL 末尾生产一串随机字符串。

[root@localhost ~]# gotty -r df
2021/06/22 15:03:41 Server is starting with command: df
2021/06/22 15:03:41 URL: http://127.0.0.1:8080/zs8nsuez/
2021/06/22 15:03:41 URL: http://[::1]:8080/zs8nsuez/
2021/06/22 15:03:41 URL: http://192.168.128.134:8080/zs8nsuez/
2021/06/22 15:03:41 URL: http://[fe80::7246:6047:4d9f:84b6]:8080/zs8nsuez/
2021/06/22 15:03:41 URL: http://192.168.122.1:8080/zs8nsuez/

通过与字符串的拼接,URL 会变得随机,这样可以降低 URL 泄露的风险。从浏览器访问的效果如下:

  • 启用 TLS/SSL

目前,我们通过选项加入了身份验证和随机 URL,但另一个安全隐患是,当前所有的连接都是不安全的,即没有通过 HTTPS 协议来访问。

针对这个问题,可以使用 --tls-t 选项来开启 TLS/SSL,并通过 --tls-crt--tls-key 指定证书和密钥。

# 这里的证书为工具生成的自签证书。
[root@localhost ~]# gotty -t --tls-crt ./server.crt --tls-key ./server.key df

此时再用 HTTPS 来访问,可以看到,连接已经是安全的了:

配置文件

正如介绍所言,GoTTY 的选项很多,即使有短写格式,仍免不了书写繁琐的麻烦。此时,我们可以将通用的选项写到配置文件中。

GoTTY 默认的配置文件为 ~/.gotty,这个文件不会自动生成,需要手动创建。创建完成后,可以把之前的选项都加入到配置文件中:

[root@localhost ~]# vi ~/.gotty

# 监听端口
port = "8080"
# 允许可写
permit_write = true
# 允许传参
permit_arguments = true
# 开启身份验证
enable_basic_auth = true
# 设置用户名和密码
credential = "admin:admin"
# 开启随机 URL
enable_random_url = true
# 开启 TLS/SSL
enable_tls = true
# 指定证书
tls_crt_file = "~/server.crt"
# 指定密钥
tls_key_file = "~/server.key"

通过配置文件,我们还可以自定义 Web 端的标题、字体大小以及其它选项值等,完整的配置文件可以参考这里[2]

写在最后

有一说一,由 GoTTY 打开的网页操作起来并不方便,远不如 XShell 之类的工具来得好用。但在某些场景,比如开头描述的情况下,使用 GoTTY 是恰到好处的。

References

[1] GoTTY: https://github.com/yudai/gotty
[2] 这里: https://github.com/yudai/gotty/blob/master/.gotty

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • Alamofire 是一款 Swift 写的 HTTP 网络请求库 前言 本篇内容为 Alamofire 官方 R...
    zongmumask阅读 20,759评论 6 66
  • 文/ZYRzyr原文链接:http://www.jianshu.com/p/d8fdd6efe2cb [Depre...
    ZYRzyr阅读 2,222评论 2 51
  • curl是一个命令行工具,通过指定的URL来上传或下载数据,并将数据展示出来。curl中的c表示client,而U...
    起名难倒英雄汉阅读 197,138评论 6 64
  • 话不多说,下面开始,nagios具体的介绍,可以搜一下,这篇文章为作者在实际操作中整理出来的,~如果不想在线看,可...
    kopshome阅读 716评论 0 1
  • 简介 Zabbix 是一个企业级分布式开源监控解决方案。 Zabbix 软件能够监控众多网络参数和服务器的健康度、...
    One_way_Wang阅读 3,215评论 0 0