热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

更优于Shellinabox的webshell工具--ttyd

ttyd是一个运行在服务端,客户端通过web浏览器访问从而连接后台tty(pts伪终端)接口的程序,把shell终端搬到web浏览器中。WebSocketWebSoc

ttyd 是一个运行在服务端,客户端通过web浏览器访问从而连接后台 tty (pts伪终端)接口的程序,把 shell 终端搬到 web 浏览器中。
更优于 Shellinabox 的 web shell 工具 -- ttyd


WebSocket

WebSocket 是 HTML5 开始提供的一种基于HTTP协议与服务器WebServer进行单会话、长连接、全双工的网络技术,依靠这种技术可以实现客户端和服务端的长连接,双向实时通信,以及基于服务端主动向客户端的实时消息推送交互的底层技术栈。
它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息, 是真正的双向平等对话,属于服务器推送技术的一种。

其他特点包括:

  • 建立在 TCP 协议之上,服务器端的实现比较容易。
  • 与 HTTP 协议有着良好的兼容性。默认端口也是 80 和 443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
  • 数据格式比较轻量,性能开销小,通信高效。
  • 可以发送文本,也可以发送二进制数据
  • 没有同源限制,客户端可以与任意服务器通信。
  • 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

    ttyd 不同于 Shellinabox 项目的底层原理,它使用基于HTML5的 WebSocket 协议,更少的http交互带来更高效、更高性能、更低延时的交互式会话服务。

ttyd 也可以通过 Nginx 7层HTTP代理访问,更高的灵活性。

ttyd 内建支持 SSL/TLS 传输层认证加密,支持客户端/服务端的单向/双向证书认证加密,更高的安全性。

OS Support:

* macOS
* Linux
* Microsoft Windows
* FreeBSD/OpenBSD
* OpenWrt/LEDE

Feature:

* C语言内建`libwebsockets`核心库,高速、低内存消耗、高性能特性。 
* 基于`Xterm.js`的全功能终端,支持 CJK 不同语言和 IME 输入法字符输入。
* 窗口图形化 `ZMODEM` 支持,服务端需安装 `lrzsz` 程序。
* 可实现基于简单的 Basic Auth 基本认证(不加密通信)。
* 可实现基于 OpenSSL 的传输层加密通信支持(加密通信)。
* 跨平台: macOS, Linux, FreeBSD/OpenBSD, OpenWrt/LEDE, Windows

Linux 平台安装方式:

  • 方式一:下载二进制程序文件,本地直接运行即可(推荐)
  • 方式二:下载源码文件,安装依赖库编译安装
    sudo apt-get install cmake g++ pkg-config git vim-common libwebsockets-dev libjson-c-dev libssl-dev
    git clone https://github.com/tsl0922/ttyd.git
    cd ttyd && mkdir build && cd build
    cmake ..
    make && make install

    如果安装libwebsockets-dev(版本过时)失败,你可能需要单独编译安装libwebsockets

使用方式:

####程序帮助信息:

ttyd is a tool for sharing terminal over the web

USAGE:
    ttyd [options]  []

VERSION:
    1.5.2

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
    -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.
用例:
./ttyd -p 8080 bash -x
# 页面以当前用户的身份和环境变量进行后台连接,fork 的方式为 bash 调试方式运行。
./ttyd --max-clients 2 -u 500 top
# 以指定的系统用户身份的uid运行服务,登录页面即为运行 top 命令的输出结果。

运行系统账户登录认证

./ttyd --max-clients 2 login
# 以当前用户身份运行服务。

注意:如需root身份登录终端,需要在属主属组为 root 的 /etc/securetty文件中增加可登录的终端类型pts/0 pts/1 pts/2,当然也需要运行 ttyd 程序的用户有可读 /etc/securetty 文件的权限(当然也就是以 root 身份启动 ttyd 服务)。
所以,为安全性考虑,不建议以 root 身份启动 ttyd 服务,也就不建议直接以 root 账户登录 ttyd websockets页面伪终端。

运行特定的后台交互式服务

# console
./ttyd --max-clients 2 -a mysql -h localhost 
// -a, --url-arg 允许url携带参数,参数将直接应用到 command 程序中。

# browser 1  使用 command 默认参数
http://localhost:7681

Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

# browser 2   在url请求中使用指定的 command 参数
http://localhost:7681/?arg=-uadmin&arg=-pPASSWORD&arg=mysql

mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
28 rows in set (0.00 sec)

通过 ZMODEM 上传下载文件,服务端需安装 lrzsz

# 向客户端发送本地文件
sz a.log 

更优于 Shellinabox 的 web shell 工具 -- ttyd

# 服务端接收客户端上传的文件
rz

更优于 Shellinabox 的 web shell 工具 -- ttyd

使用 SSL 加密传输流量

本例使用本地自签证书示例

# CA certificate (FQDN must be different from server/client)
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 365 -key ca.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=Acme Root CA" -out ca.crt

# server certificate (for multiple domains, change subjectAltName to: DNS:example.com,DNS:www.example.com)
openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=localhost" -out server.csr
openssl x509 -sha256 -req -extfile <(printf "subjectAltName=DNS:localhost") -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt

# 双向认证 client certificate (the p12/pem format may be useful for some clients)(可选)
openssl req -newkey rsa:2048 -nodes -keyout client.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=client" -out client.csr
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
openssl pkcs12 -in client.p12 -out client.pem -clcerts

服务端单向认证

./ttyd --ssl --ssl-cert server.crt --ssl-key server.key bash

更优于 Shellinabox 的 web shell 工具 -- ttyd

客户端/服务端双向认证,需增加--ssl-ca选项,桌面浏览器另外需要单独安装 client.p12证书到本地

./ttyd --ssl --ssl-cert server.crt --ssl-key server.key --ssl-ca ca.crt bash

更优于 Shellinabox 的 web shell 工具 -- ttyd
更优于 Shellinabox 的 web shell 工具 -- ttyd

在 curl 中测试证书验证

curl --insecure --cert client.p12[:password] -v https://localhost:7681

如需把服务挂靠在 Nginx 后端,请配置增加如下 ws 参数:

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection upgrade;
        proxy_read_timeout 3600

推荐阅读
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • windows平台使用NSP拦截具体进程的域名解析过程(xFsRedir的代理功能之域名代理)
    byfanxiushu2022-10-17转载或引用请注明原始作者。xFsRedir软件其中之一的功能就是实现了全方位的网络代理,从主机代理,到本地代理 ... [详细]
  • phpstudy云服务器安装,如何安装phpstudy
    本文目录一览:1、phpstudy安装在哪本地电脑还是服务器? ... [详细]
  • [精华]原来win+apache实现ssl的证书认证如此简单http:www.chinaunix.net作者:ataman发表于:2008-05-2218:16:46【 ... [详细]
  • 为什么要研究TrinityCore?(1)它是一个完整成熟的可运行调试的网游服务器框架。(2)它是一个跨平台的标准C++编写的项目,在Windows、Linux、MacOSX上都可编译运行。(3) ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 安卓及谷歌官网不容易上,在此整理好下载地址,这样就可以直接用迅雷下载了。Eclipse最新Mars版Eclipse(暂时还没被墙)Mac版:http:www.eclipse.org ... [详细]
  • 网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和 ... [详细]
  • linux clickhouse安装在指定目录_Centos8服务器指定目录安装配置Nginx
    1.安装前准备(1)检查是否安装过nginx(如果没有安装过可以无视)find-namenginx搜索nginx文件及其文件夹rm-rf【nginx配置地址文件及其文件夹】手动删除 ... [详细]
  • Git 第二章 Git 安装和卸载
    1.Git安装1.1软件下载打开[git官网]https:git-scm.com,下载git对应操作系统的版本。所有东西下载慢的话就可以去找镜像!官网 ... [详细]
author-avatar
单纯只是一2502904797
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有