爱意满满的作品展示区。
tsl0922

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

  •  
  •   tsl0922 ·
    tsl0922 · Sep 14, 2016 · 8001 views
    This topic created in 3553 days ago, the information mentioned may be changed or developed.

    这个项目最初的灵感来源于平时操作无线路由器时想在网页上执行一些命令,但是目前的开源的路由器系统( 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 贡献代码。

    Supplement 1  ·  Sep 16, 2016

    新增了 homebrew 安装支持:

    brew tap tsl0922/ttyd
    brew install ttyd --HEAD
    

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

    Supplement 2  ·  Sep 17, 2016

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

    Supplement 3  ·  Sep 25, 2016

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

    12 replies    2016-09-19 09:13:27 +08:00
    miaoever
        1
    miaoever  
       Sep 14, 2016
    当年用 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  
       Sep 14, 2016
    不错
    clanned
        3
    clanned  
       Sep 14, 2016 via Android
    可以试试 [shellinabox]( https://github.com/freedocs/docs/blob/master/为%20r6300v2%20 和%20ac68u%20ddwrt%20 安装和编译可执行文件.md#编译-shellinabox)
    itfanr
        4
    itfanr  
       Sep 14, 2016
    bao3
        5
    bao3  
       Sep 14, 2016 via Android
    楼主,用 3 楼的就可以了,非常方便,这么多年一直是 OPwrt + shellinabox 。
    fhefh
        6
    fhefh  
       Sep 14, 2016
    mark~
    wshcdr
        7
    wshcdr  
       Sep 14, 2016
    MARK 一下
    Tink
        8
    Tink  
    PRO
       Sep 15, 2016 via iPhone
    @clanned 这个对于只能私钥登陆的是不是就没办法了?
    clanned
        9
    clanned  
       Sep 15, 2016 via Android
    @Tink 没试过,总有办法的吧。可以搞成无密码,用 HTTPS + BASIC auth
    tsl0922
        10
    tsl0922  
    OP
       Sep 15, 2016
    @itfanr 类似,但是 ttyd 更灵活些,可以执行任意程序,你贴的那个项目其实就相当于 `ttyd ssh user@host -p port`
    mingyun
        11
    mingyun  
       Sep 17, 2016
    mark
    itfanr
        12
    itfanr  
       Sep 19, 2016
    @tsl0922 哦哦 看了你的代码,代码量不大,但是由于用了好多外部库,所以就没懂 有空再研究
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2782 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 09:30 · PVG 17:30 · LAX 02:30 · JFK 05:30
    ♥ Do have faith in what you're doing.