编者叭叭:centos7已于2024年6月30日停止维护,虽然替换成国内镜像源还能使用,但镜像源没有义务给各位长期提供免费服务,Redhat官方既然已经决定让centos7成为历史,那国内各大互联网厂商又还能有什么持续维护的理由呢,我除了服务跑的比较多的一台centos7.9还在跑之外其余的几台全部换成debian11了,有空再做迁移。

那么正题开始~❀❀

安装部分

apt-get install build-essential cmake git libjson-c-dev libwebsockets-dev -y

下载安装编译工具和库
1.png

git clone https://github.com/tsl0922/ttyd.git

拉取项目仓库(仓库是在github拉取,大部分地区无法直接访问,请自行百度解决办法)
3.png

cd ttyd && mkdir build && cd build

进入项目文件夹并创建和进入build文件夹准备编译安装
4.png

cmake ..

构建项目
5.png

make && sudo make install、make && make install

编译安装,由于没有安装sudo并且是root用户直接执行,所以可以不用sudo提权
6.png

ttyd --version

验证安装并查看版本
7.png

ttyd --help

查看帮助

root@debian:~# ttyd --help
ttyd is a tool for sharing terminal over the web

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

VERSION:
    1.7.7-40e79c7

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)
    -U, --socket-owner      User owner of the UNIX domain socket file, when enabled (eg: user:group)
    -c, --credential        Credential for basic authentication (format: username:password)
    -H, --auth-header       HTTP Header name for auth proxy, this will configure ttyd to let a HTTP reverse proxy handle authentication
    -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)
    -w, --cwd               Working directory to be set for the child program
    -a, --url-arg           Allow client to send command line arguments in URL (eg: http://localhost:7681?arg=foo&arg=bar)
    -W, --writable          Allow clients to write to the TTY (readonly by default)
    -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
    -q, --exit-no-conn      Exit on all clients 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, max length: 128)
    -P, --ping-interval     Websocket ping interval(sec) (default: 5)
    -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

官方帮助如上
下面是gpt3.5的说明

-p, --port:指定 ttyd 监听的端口号。默认为 7681,可以使用 0 来指定随机端口。
-i, --interface:指定 ttyd 绑定的网络接口或 UNIX 域套接字路径。例如,可以使用 eth0 来指定网络接口,或使用 /var/run/ttyd.sock 来指定 UNIX 域套接字路径。
-U, --socket-owner:启用时,设定 UNIX 域套接字文件的用户所有者。格式为 user:group,例如 root:root。
-c, --credential:指定用于基本身份验证的凭据。格式为 username:password,例如 admin:password。
-H, --auth-header:指定用于身份验证代理的 HTTP 标头名称。这将配置 ttyd 让 HTTP 反向代理处理身份验证。
-u, --uid:指定要以其身份运行程序的用户 ID。
-g, --gid:指定要以其群组身份运行程序的群组 ID。
-s, --signal:指定在退出命令时发送的信号。默认为 1(SIGHUP)。
-w, --cwd:指定要为子程序设置的工作目录。
-a, --url-arg:允许客户端在 URL 中发送命令行参数。例如,可以使用 http://localhost:7681?arg=foo&arg=bar 来发送参数。
-W, --writable:允许客户端写入 TTY。默认情况下为只读。
-t, --client-option:向客户端发送选项。格式为 key=value,可以重复使用以添加更多选项。
-T, --terminal-type:指定要报告的终端类型。默认为 xterm-256color。
-O, --check-origin:禁止来自不同来源的 WebSocket 连接。
-m, --max-clients:指定 ttyd 支持的最大客户端数。默认为 0,表示没有限制。
-o, --once:仅接受一个客户端,并在断开连接时退出。
-q, --exit-no-conn:在所有客户端断开连接时退出。
-B, --browser:使用默认系统浏览器打开终端。
-I, --index:指定自定义的 index.html 路径。
-b, --base-path:指定来自反向代理的请求的预期基本路径。例如,可以使用 /mounted/here 来指定基本路径。
-P, --ping-interval:指定 WebSocket ping 间隔(秒)。默认为 5。
-6, --ipv6:启用 IPv6 支持。
-S, --ssl:启用 SSL。
-C, --ssl-cert:指定 SSL 证书文件路径。
-K, --ssl-key:指定 SSL 密钥文件路径。
-A, --ssl-ca:指定用于客户端证书验证的 SSL CA 文件路径。
-d, --debug:设置日志级别。默认为 7。
-v, --version:打印版本信息并退出。
-h, --help:打印帮助信息并退出。

使用部分

根据上方帮助运行一个示例并查看

root@debian:~# ttyd bash
[2024/07/26 15:39:00:2653] N: ttyd 1.7.7-40e79c7 (libwebsockets 4.1.6-)
[2024/07/26 15:39:00:2653] N: tty configuration:
[2024/07/26 15:39:00:2653] N:   start command: bash
[2024/07/26 15:39:00:2653] N:   close signal: SIGHUP (1)
[2024/07/26 15:39:00:2653] N:   terminal type: xterm-256color
[2024/07/26 15:39:00:2653] N: The --writable option is not set, will start in readonly mode[2024/07/26 15:39:00:2653] N: LWS: 4.1.6-, loglevel 7
[2024/07/26 15:39:00:2653] N: NET CLI SRV H1 H2 WS IPV6-off
[2024/07/26 15:39:00:2658] N:    /usr/lib/x86_64-linux-gnu/libwebsockets-evlib_uv.so
[2024/07/26 15:39:00:2662] N:  Using foreign event loop...
[2024/07/26 15:39:00:2663] N:  Listening on port: 7681

8-ttyd示例查看.png

为了安全美观以及可以在浏览器使用lrzsz软件,我们可以使用下面的启动方式来实现。

ttyd -p 1234 -c username:password -t enableZmodem=true -W  zsh

参数说明:

-p 为固定端口,如果是在云服务器上使用ttyd的话相应端口需要打开
-c 为添加登陆验证,username为用户名,password为密码,都可以自定义
-t 为使用其他选项,当前为enableZmodem=true指启用ZMODEM/lrzsz的文件传输功能,这两个软件需要单独安装
-W 默认为只读,没有输入的权限,加上这条就能输入
zsh 为自定义shell环境,linux默认是bash,zsh需要单独安装,可以配置各种皮肤及辅助插件

尝试连接

root@debian:~# ttyd -p 1234 -c user:passwd -t enabeZmodem=true -W zsh 
[2024/07/26 15:53:27:7120] N: ttyd 1.7.7-40e79c7 (libwebsockets 4.1.6-)
[2024/07/26 15:53:27:7121] N: tty configuration:
[2024/07/26 15:53:27:7121] N:   credential: dXNlcjpwYXNzd2Q=
[2024/07/26 15:53:27:7121] N:   start command: zsh
[2024/07/26 15:53:27:7121] N:   close signal: SIGHUP (1)
[2024/07/26 15:53:27:7121] N:   terminal type: xterm-256color
[2024/07/26 15:53:27:7121] N: LWS: 4.1.6-, loglevel 7
[2024/07/26 15:53:27:7121] N: NET CLI SRV H1 H2 WS IPV6-off
[2024/07/26 15:53:27:7125] N:    /usr/lib/x86_64-linux-gnu/libwebsockets-evlib_uv.so
[2024/07/26 15:53:27:7130] N:  Using foreign event loop...
[2024/07/26 15:53:27:7130] N:  Listening on port: 1234

9-ttyd实战演示.png
10-实战ttyd上传.png

拓展内容

以上,就完成了题目的内容,but...这样开启一个服务你关闭窗口后就没了,那么要怎么才能设置开机自启并不占用一个shell呢?
答:众所周知,linux以前一直使用init来管理系统进程,在2010年发布后内置了Systemd这个系统程序来管理,他的诞生不仅仅是替代init,它是一个包含大约 70 个二进制文件的套件,用于处理系统初始化、守护进程和服务、日志记录和日志记录,以及 Linux 中已经由专用模块处理的许多其他功能。所以我们可以创建一个systemd文件来实现开机自启这个程序。

进入/lib/systemd/system/,创建一个名为ttyd.service的文件

root@debian:~# cd /lib/systemd/system/
root@debian:/lib/systemd/system# vi ttyd.service

按 i 键进入 install 模式,输入下方配置

[Unit]
Description=ttyd service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=ttyd -p 1234 -c amdin:admin@123 -t enableZmodem=true -W zsh

[Install]
WantedBy=multi-user.target

11-system任务创建.png

完后按键盘esc键退出编辑模式,输入英文的:wq并回车
重载system服务文件

systemctl daemon-reload

启动ttyd服务

systemctl start ttyd

查看ttyd服务状态

systemctl status ttyd

12-tty任务运行.png

没问题的话会什么都不提示,如果一堆不认识的返回报错警告这些的,尝试关闭原先运行的ttyd程序并检查端口是否冲突。
最后,开启ttyd服务的开启自启

systemctl enable ttyd

root@debian:/lib/systemd/system# systemctl enable ttyd
Created symlink /etc/systemd/system/multi-user.target.wants/ttyd.service -> /lib/systemd/system/ttyd.service.

这样就行了,以后重启服务会跟着起来,非常适合在特殊环境无法使用ssh或者图方便远程自己的服务器并做一些简单的运维,当然如果你的linux有安装桌面的话可以只用VNC来配置使用浏览器直接访问桌面环境。

标签: none

相关文章推荐

添加新评论,含*的栏目为必填