大家好,我是查理。
之前写过一篇《万物皆可 API》,这个我的项目就是把一些脚本的执行后果输入到了网页外面。
然而这个还是有很多改良空间,比如说 UI 能难看些,甚至能执行交互命令该多好,最初思来想去,它的究极状态不就是一个 Web 版的 Terminal(终端)吗?
而后原本我还想着对我的项目进行革新来着,然而想想,最终如果要革新成一个 Web 版的 Terminal,这个必定曾经有开源实现了。
于是我就开始搜,最初搜到几个还不错的。
Web Terminal
- ttyd:https://github.com/tsl0922/ttyd,一款能够将命令行转到 Web 执行的工具,基于 C 编写的。
- gotty:https://github.com/yudai/gotty,和 ttyd 一样,只不过是 Go 语言写的,但最新更新是在 2017 年了,预计失修了。
- wetty:https://github.com/butlerx/wetty,基于 Node.js 开发的,也能够将命令行转到 Web 执行,然而须要基于 SSH 登录,其实就是个 Web 版的 SSH 终端。
- Secure Shell (Chrome App):Google 浏览器插件,也能够提供网页版 SSH 终端。
- tmate:https://tmate.io/,从 tmux 批改而来,能够反对 Terminal 分享。
通过一番试用,我集体首推的还是 ttyd,其余的几个要么是基于 SSH 的,要么不怎么好用或进行保护了。
上面我就来介绍下 ttyd 的简略用法。
装置
装置其实非常简单,我用的是 Mac,所以用 HomeBrew 间接装置即可:
brew install ttyd
如果你用的是 Windows、Linux,仍然也能够反对,装置能够参考 https://github.com/tsl0922/tt… 章节。
应用
ttyd 反对不少性能配置,残缺命令如下:
ttyd is a tool for sharing terminal over the web
USAGE:
ttyd [options] <command> [<arguments...>]
VERSION:
1.6.3
OPTIONS:
-p, --port Port to listen (default: 7681, use `0` for random port)
-i, --interface Network interface to bind (eg: eth0), or UNIX domain socket path (eg: /var/run/ttyd.sock)
-c, --credential Credential for Basic Authentication (format: username:password)
-u, --uid User id to run with
-g, --gid Group id to run with
-s, --signal Signal to send to the command when exit it (default: 1, SIGHUP)
-a, --url-arg Allow client to send command line arguments in URL (eg: http://localhost:7681?arg=foo&arg=bar)
-R, --readonly Do not allow clients to write to the TTY
-t, --client-option Send option to client (format: key=value), repeat to add more options
-T, --terminal-type Terminal type to report, default: xterm-256color
-O, --check-origin Do not allow websocket connection from different origin
-m, --max-clients Maximum clients to support (default: 0, no limit)
-o, --once Accept only one client and exit on disconnection
-B, --browser Open terminal with the default system browser
-I, --index Custom index.html path
-b, --base-path Expected base path for requests coming from a reverse proxy (eg: /mounted/here)
-P, --ping-interval Websocket ping interval(sec) (default: 300)
-6, --ipv6 Enable IPv6 support
-S, --ssl Enable SSL
-C, --ssl-cert SSL certificate file path
-K, --ssl-key SSL key file path
-A, --ssl-ca SSL CA file path for client certificate verification
-d, --debug Set log level (default: 7)
-v, --version Print the version and exit
-h, --help Print this text and exit
Visit https://github.com/tsl0922/ttyd to get more information and report bugs.
能够看到,这里能够应用 -p 来指定运行端口,应用 -c 指定登录明码等等。
根本应用
咱们来试下,最根本的命令如下:
ttyd bash
这样就应用启动了一个 Web 版的 bash,运行后果如下:
这里显示是在 7681 上运行的,那咱们就能够关上 http://localhost:7681/,就能够间接运行命令了:
十分丝滑。
看了下背地的传输协定是 WebSocket,所以稳定性还是有保障的:
当然,咱们也能够不必 bash,用本人喜爱的 Shell,比方 zsh,命令如下:
ttyd zsh
这样的话浏览器外面的 Shell 就是 zsh 啦:
绑定端口
当然咱们也能够更换端口,比方 8000,则能够应用如下命令:
ttyd -p 8000 zsh
这样 ttyd 就能够在 8000 端口运行 HTTP 服务,咱们关上 http://localhost:8000/ 就能够执行命令了。
Basic Auth
当然这么间接裸露进来仿佛也不太平安,咱们能够设置 Basic Auth,应用 -c 这个选项即可指定用户名明码,格局为 username:password
,例如咱们指定用户名和明码都是 admin,那命令就这么写:
ttyd -p 8000 -c admin:admin zsh
这样关上 http://localhost:8000/ 之后就须要输出用户名明码才能够登录了:
主动关上浏览器
咱们还能够应用 -B 命令让它主动关上浏览器:
ttyd -p 8000 -B zsh
这样运行之后,默认的浏览器就会主动关上 http://localhost:8000/,不必咱们再去敲网址了,非常不便。
所以,下面这个命令甚至咱们还能够做成一个 alias,比方:
alias webcmd="ttyd -p 8000 -B zsh";
这样输出 webcmd
就能够轻松关上一个 Web 版命令行了。
Docker 反对
另外 ttyd 还提供了 Docker 镜像,如果你不想装置的话,能够间接启 Docker,比方这样的话就能够在 7681 上启动:
docker run -it --rm -p 7681:7681 tsl0922/ttyd
但这实际上是把容器外部的命令行裸露进去了,如果要裸露宿主机的命令行还须要 mount 下磁盘:
SSH 终端
ttyd 还反对 SSH 终端,命令如下:
ttyd login
这样的话,关上浏览器之后就须要 SSH 登录,输出正确的 SSH 用户名和明码后能力应用。
SSL 反对
如果你想配置 SSL 反对,即反对 HTTPS 的话,能够本人生成证书并增加对应的参数来启动 ttyd,参考链接是:https://github.com/tsl0922/tt…。
更多
下面的用法根本能满足日常须要了,如果想要理解更多用法,能够参考其 Wiki,链接是:https://github.com/tsl0922/tt…。
公网裸露
当然,咱们如果想把它公网裸露进去,还能够配合 Ngrok,比方 ttyd 运行在 8000 端口上,我能够应用 Ngrok 将其裸露进去:
ngrok http 8000
运行后果如下:
这样我就能够通过指定的 URL 拜访这个终端了,比方这里我就能够应用 https://11b4-2404-f801-8050-3… 来拜访我的终端了:
十分 Nice!
总结
好了,以上就是 ttyd 的根本应用了,有了它,咱们就能够轻松将某台机器上的终端转到 Web 上来执行了,还是十分不便有用的。