《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个通过Web访问设备终端的工具——rtty。
rtty由客户端和服务端组成。客户端采用纯C实现,服务端采用Go语言实现,前端界面采用vue实现。使用rtty可以在任何地方通过Web访问您的设备的终端,通过设备ID来区分您的不同的设备。rtty非常适合远程维护linux设备。
特性
- 客户端 C 语言实现,非常小,适合嵌入式 Linux
不支持 SSL:rtty(32K) + libev(56K)
支持的 SSL:+ libmbedtls(88K) + libmbedcrypto(241K) + libmbedx509(48k)
- 远程批量执行命令
- 支持SSL:openssl, mbedtls, CyaSSl(wolfssl)
- SSL 双向认证(mTLS)
- 非常方便地上传和下载文件
- 根据设备ID访问不同的设备
- 支持 HTTP 代理 - 访问您的设备的 Web
- 基于Xterm.js的全功能终端
- 部署简单,使用方便
客户端依赖
- libev - 高性能的事件循环库
- mbedtls(polarssl)、CyaSSl(wolfssl)或者openssl - 如果您需要支持SSL
部署服务端
1 从Release页面下载编译好的二进制文件或者自己编译
git clone https://github.com/zhaojh329/rttys
cd ui
npm install
npm run build
cd ..
./build.sh linux amd64
2 认证
- Token
生成一个 token:
$ rttys token
Please set a password:******
Your token is: 34762d07637276694b938d23f10d7164
使用 token:
$rttys -t 34762d07637276694b938d23f10d7164
- SSL 双向认证(mTLS)
您可以在配置文件中指定设备 CA 存储(有效文件)或在 CLI 中指定设备 CA 存储(参数 ssl-cacert) 来启用 mTLS。 存储中没有有效 CA 的设备将在 TLS 握手中断开连接。
3 运行服务
移动rttys可执行程序到/usr/local/bin/
sudo mv rttys /usr/local/bin/
拷贝配置文件到/etc/rttys/
sudo mkdir /etc/rttys
sudo cp rttys.conf /etc/rttys/
创建一个systemd单元文件: /etc/systemd/system/rttys.service
[Unit]
Description=rttys
After.NETwork.target
[Service]
ExecStart=/usr/local/bin/rttys run -c /etc/rttys/rttys.conf
TimeoutStopSec=5s
[Install]
WantedBy=multi-user.target
要首次启动该服务,请执行通常的systemctl操作
sudo systemctl daemon-reload
sudo systemctl enable rttys
sudo systemctl start rttys
可以通过以下方式停止服务
sudo systemctl stop rttys
4 数据库准备(Sqlite、MySQL 或者 Mariadb)
在数据库实例上,以root用户身份登录到数据库控制台
mysql -u root -p
创建将由 Rttys 使用的数据库用户,通过密码验证。本例使用 “rttys” 作为密码。请为您的实例使用安全密码
CREATE USER 'rttys' IDENTIFIED BY 'rttys';
使用 UTF-8 字符集和排序规则创建数据库。确保使用 utf8mb4 字符集而不是 utf8,因为前者支持基本多语言平面 之外的所有 Unicode字符(包括emojis)。另外,根据您期望的内容选择排序规则。如有疑问,请使用 unicode_ci 或general_ci
CREATE DATABASE rttys CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
将数据库上的所有权限授予上面创建的数据库用户
GRANT ALL PRIVILEGES ON rttys.* TO 'rttys';
FLUSH PRIVILEGES;
安装rtty(针对Linux发行版)
安装依赖
sudo apt install -y libev-dev libssl-dev # Ubuntu, Debian
sudo pacman -S --noconfirm libev openssl # ArchLinux
sudo yum install -y libev-devel openssl-devel # centos
克隆rtty代码
git clone --recursive https://github.com/zhaojh329/rtty.git
编译
cd rtty && mkdir build && cd build
cmake .. && make install
运行rtty
将下面的参数替换为您自己的参数
sudo rtty -I 'My-device-ID' -h 'your-server' -p 5912 -a -v -d 'My Device Description'
如果您的 rttys 配置了一个 token,请加上如下参数(将下面的 token 替换为您自己生成的)
-t 34762d07637276694b938d23f10d7164
通过浏览器访问
使用 Web 浏览器访问您的服务器:
http://your-server-host:5913,然后点击连接按钮。
或者直接连接设备,无需 Web 登录(需要在服务端配置设备白名单)
http://your-server-host:5913/connect/devid1
http://your-server-host:5913/connect/devid2
从本地传输文件到远程设备
rtty -R
从远程设备传输文件到本地
rtty -S test.txt
—END—
开源协议:MIT
开源地址:
https://github.com/zhaojh329/rtty