美文网首页IT必备技能
GoTTY 使用指南:如何将终端分享到 Web 端

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

作者: Xpitz | 来源:发表于2021-06-24 16:12 被阅读0次

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

    最近正值项目上线,项目采用微服务架构并通过 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

    相关文章

      网友评论

        本文标题:GoTTY 使用指南:如何将终端分享到 Web 端

        本文链接:https://www.haomeiwen.com/subject/jlazeltx.html