V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
tsl0922
V2EX  ›  分享创造

造了一个新的轮子 ttyd -- 分享任意命令行程序到网页上

  •  
  •   tsl0922 ·
    tsl0922 · 2016-09-14 09:28:20 +08:00 · 7332 次点击
    这是一个创建于 3002 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    项目地址: https://github.com/tsl0922/ttyd

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

    效果:

    screenshot

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

    虽然 ttyd 的目标是运行到路由器上,但是目前只在 PC 的 Mac 和 Linux 机器上测试过,还没交叉编译到路由器上测试过,主要是功能还不够完善,等完善了些再到路由器上测试, ttyd 的开发主要在 Mac 下进行。

    欢迎 Star/Fork ,如果有什么意见建议或 bug 可以在 issues 里反馈,或者直接发 PR 贡献代码。

    第 1 条附言  ·  2016-09-16 19:05:36 +08:00

    新增了 homebrew 安装支持:

    brew tap tsl0922/ttyd
    brew install ttyd --HEAD
    

    因为还没有一个正式稳定的 release,所以目前只提供 HEAD 版本安装,以后发布稳定版本会考虑提交到官方 homebrew 仓库里。

    第 2 条附言  ·  2016-09-17 21:31:34 +08:00

    添加了 OpenWrt 的 Makefile 🎉 ,有兴趣的可以先自己编译一个玩玩,等程序完善些我会发布一个 release 并提交到官方软件源。

    第 3 条附言  ·  2016-09-25 09:54:03 +08:00

    首个正式 release 发布:https://github.com/tsl0922/ttyd/releases/tag/1.0.0 ,现在可以不用加 --HEAD 直接 brew install tsl0922/ttyd/ttyd 来安装了。

    12 条回复    2016-09-19 09:13:27 +08:00
    miaoever
        1
    miaoever  
       2016-09-14 09:51:58 +08:00
    当年用 Node.js 写过一个类似的.

    用户想要分享自己的终端,只需运行 client ,自动生成一个 url , 比如: http://etherpty.io/b0f3003a47574a9dada220208e389a92

    观众只需要在浏览器中访问该 url 就可以看到实时的终端界面。

    同时还支持观众在浏览器中远程操控终端。

    sharing client:
    https://github.com/miaoever/etherpty-cli

    backend server:
    https://github.com/miaoever/etherpty-server
    fyibmsd
        2
    fyibmsd  
       2016-09-14 10:13:31 +08:00
    不错
    clanned
        3
    clanned  
       2016-09-14 10:48:06 +08:00 via Android
    可以试试 [shellinabox]( https://github.com/freedocs/docs/blob/master/为%20r6300v2%20 和%20ac68u%20ddwrt%20 安装和编译可执行文件.md#编译-shellinabox)
    itfanr
        4
    itfanr  
       2016-09-14 11:54:08 +08:00
    bao3
        5
    bao3  
       2016-09-14 12:38:27 +08:00 via Android
    楼主,用 3 楼的就可以了,非常方便,这么多年一直是 OPwrt + shellinabox 。
    fhefh
        6
    fhefh  
       2016-09-14 15:12:58 +08:00
    mark~
    wshcdr
        7
    wshcdr  
       2016-09-14 17:10:33 +08:00
    MARK 一下
    Tink
        8
    Tink  
       2016-09-15 07:39:12 +08:00 via iPhone
    @clanned 这个对于只能私钥登陆的是不是就没办法了?
    clanned
        9
    clanned  
       2016-09-15 08:25:22 +08:00 via Android
    @Tink 没试过,总有办法的吧。可以搞成无密码,用 HTTPS + BASIC auth
    tsl0922
        10
    tsl0922  
    OP
       2016-09-15 14:20:38 +08:00
    @itfanr 类似,但是 ttyd 更灵活些,可以执行任意程序,你贴的那个项目其实就相当于 `ttyd ssh user@host -p port`
    mingyun
        11
    mingyun  
       2016-09-17 20:46:31 +08:00
    mark
    itfanr
        12
    itfanr  
       2016-09-19 09:13:27 +08:00
    @tsl0922 哦哦 看了你的代码,代码量不大,但是由于用了好多外部库,所以就没懂 有空再研究
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1077 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:25 · PVG 06:25 · LAX 14:25 · JFK 17:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.