文档章节

ttyd -- 分享任意命令行程序到网页上

tsl0922
 tsl0922
发布于 2016/09/17 13:40
字数 906
阅读 786
收藏 30

这个项目最初的灵感来源于平时操作无线路由器时想在网页上执行一些命令,但是目前的开源的路由器系统(openwrt)没有一个很好的网页终端模拟器,最多也只是支持执行一个命令然后把结果显示到网页上,完全没有交互。有些路由器还不限制 top 之类的命令执行,一执行就可能会直接卡住网页界面。

找了一下类似的程序,发现了 WettyGoTTY,但是 Wetty 需要 node 运行环境, GoTTY 编译后的二进制文件太大,多数路由器的 flash 都比较小,不适合集成到路由器固件里。

一直想自己写一个,上周末终于有时间开工,现在算是可以用了,但是目前只实现了基本的 PTY 转发和网页上的显示交互,还不够完善。

项目地址

https://github.com/tsl0922/ttyd

功能特色

  • C 语言编写,在速度和内存占用上相比其它实现有一些优势
  • 实时交互,网页和服务器端使用 websocket 通信(基于 libwebsockets)
  • 前端使用 chromium hterm 实现终端模拟,功能完备
  • 安全,支持配置用户名密码认证(Basic Auth),还支持 SSL 加密通信(基于 OpenSSL
  • 可以执行任意命令行程序,不只是 bash 之类的 shell
  • 跨平台,可以在 Linux、macOS、OpenWrt 下运行

安装方法

mac 用户可以直接用 homebrew 安装:brew install ttyd,linux 下目前只能手工编译安装,具体步骤请查看项目的 README

命令行参数

ttyd is a tool for sharing terminal over the web

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

VERSION:
    1.0.0

OPTIONS:
    --port, -p              Port to listen (default: 7681)
    --interface, -i         Network interface to bind
    --credential, -c        Credential for Basic Authentication (format: username:password)
    --uid, -u               User id to run with
    --gid, -g               Group id to run with
    --signal, -s            Signal to send to the command when exit it (default: SIGHUP)
    --reconnect, -r         Time to reconnect for the client in seconds (default: 10)
    --ssl, -S               Enable ssl
    --ssl-cert, -C          Ssl certificate file path
    --ssl-key, -K           Ssl key file path
    --ssl-ca, -A            Ssl ca file path
    --debug, -d             Set log level (0-9, default: 7)
    --version, -v           Print the version and exit
    --help, -h              Print this text and exit

运行效果

screenshot

截图里执行的命令是 bash,如果想要登陆后才能使用可以执行 login,这样网页上就和 ssh 登陆一样了。

其它玩法

除了直接运行 shell 外,ttyd 还可以有很多有趣的玩法,例如:

  • 如果你想给网页上的每个人开个 docker 容器玩,可以用下面的命令启动 ttyd,这样每次打开网页都会进入 docker 容器内的 shell:

    	ttyd docker run -it --rm ubuntu bash
    
  • 如果你想一打开网页就能直接 ssh 到另一个机器上(省去进入 bash 再执行 ssh),可以这样启动 ttyd:

    	ttyd ssh root@192.168.1.1
    
  • 你甚至还可以直接执行一个 vim,这样打开进入网页后就只有一个 vim 编辑器可以操作:

    	ttyd vim
    

ttyd 基本上是 GoTTY 到 C 语言的移植,所以有一些可以共用的部分是直接使用 GoTTY 里的代码的。

ttyd 的开发主要在 Mac 下进行,支持 macOS 和 Linux 系统,还提供了一个可以给 OpenWrt 编译出二进制文件的 Makefile,但是我还没空在真机上测试,有兴趣的可以自己编译出 ipk 包传到路由器运行试试。

© 著作权归作者所有

共有 人打赏支持
tsl0922

tsl0922

粉丝 257
博文 26
码字总数 11714
作品 1
深圳
高级程序员
私信 提问
加载中

评论(1)

ODMark
ODMark
请问ttyd的使用场景有哪些?
ttyd 1.0.0 发布,C 语言编写的命令行程序

ttyd 1.0.0 发布。这是 ttyd 的首个正式版本,主要完善了一些基本功能的实现,ttyd 有以下功能和特点: C 语言编写,在速度和内存占用上相比其它实现有一些优势 网页和服务器端使用 websocke...

tsl0922
2016/09/26
2.8K
9
终端分享工具--ttyd

ttyd 是一个 C 语言编写的命令行程序,可以把任意命令行程序分享到网页上操作,可以看做是个网页版的远程终端,支持 Linux、macOS、FreeBSD系统,还可以运行在 OpenWrt/LEDE 之类的嵌入式系统...

tsl0922
2016/09/18
2.6K
1
ttyd 1.3.0 发布,终端分享工具

ttyd 1.3.0 发布了。这个版本的添加了一些新的功能还有一些 bug 修复,升级了网页终端模拟器,性能有了很大的提升。 该版本主要更新内容如下: index 选项: 自定义 index.html 文件路径 (c9f...

tsl0922
2017/02/13
1K
6
ttyd 1.1.0 发布,C 语言编写的命令行程序

ttyd 1.1.0 发布了。 新功能: once 参数: 启动后只接受一个连接并在连接关闭后退出 readonly 参数: 不允许客户端写入数据到 TTY,也就是说加了这个参数后客户端只能看风景了,比如你可以执行...

tsl0922
2016/10/13
1K
4
ttyd 1.2.1 发布,终端分享工具

ttyd 1.2.1 发布了。这个版本主要的改进是添加了对 SSL 客户端认证的支持,客户端必须使用服务器端指定的 CA 签发的证书才能连接,这可以极大的提升安全性。 ChangeLog Enable client certif...

tsl0922
2016/11/28
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

AWS的自动部署工具codedeploy 负载均衡器和github

Elastic Load Balancing 提供了三种可用于 CodeDeploy 部署的负载均衡器:Classic Load Balancer、Application Load Balancer 和 Network Load Balancer。 传统负载均衡器 路由和负载均衡在传...

守护-创造
26分钟前
3
0
Docker 使用简介

Docker 是使用 GoLang 开发的开源容器引擎,可以方便的打包开发好的应用,然后分发到任意 linux 主机上。 与传统的虚拟机相比拥有以下优势: 高效的系统资源利用率 由于不需要进行硬件虚拟和...

YanWen
30分钟前
2
0
linux多线程编程,你还在用sleep么?用pthread_cond_timedwait吧

gnal(&cond); pthread_mutex_unlock(&mutex); printf(“Wait for thread to exit\n”); pthread_join(thread, NULL); printf(“Bye\n”); return 0; } 说明(翻译摘要中提供的连接,翻译的不好......

shzwork
37分钟前
1
0
MacOS源码编译安装 PostgreSQL

编译环境 Mac OSX 下只要装了 Xcode 就行,所有编译需要的工具和类库都有了。CentOS 下需要安装下面的软件包。 $ sudo yum install make gcc readline-devel zlib-devel flex bison 如果是从...

FeanLau
48分钟前
2
0
Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则

上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则。Apollo是国内用户非常多的配置中心,所以,今天我们继续说说Spring Cloud Alibaba Sentinel中如何将流控规则存储在Apollo中。 使用...

程序猿DD
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部