《開源精選》是我們分享Github、Gitee等開源社區(qū)中優(yōu)質(zhì)項(xiàng)目的欄目,包括技術(shù)、學(xué)習(xí)、實(shí)用與各種有趣的內(nèi)容。本期推薦的是一個通過Web訪問設(shè)備終端的工具——rtty。
rtty由客戶端和服務(wù)端組成。客戶端采用純C實(shí)現(xiàn),服務(wù)端采用Go語言實(shí)現(xiàn),前端界面采用vue實(shí)現(xiàn)。使用rtty可以在任何地方通過Web訪問您的設(shè)備的終端,通過設(shè)備ID來區(qū)分您的不同的設(shè)備。rtty非常適合遠(yuǎn)程維護(hù)linux設(shè)備。
特性
- 客戶端 C 語言實(shí)現(xiàn),非常小,適合嵌入式 Linux
不支持 SSL:rtty(32K) + libev(56K)
支持的 SSL:+ libmbedtls(88K) + libmbedcrypto(241K) + libmbedx509(48k)
- 遠(yuǎn)程批量執(zhí)行命令
- 支持SSL:openssl, mbedtls, CyaSSl(wolfssl)
- SSL 雙向認(rèn)證(mTLS)
- 非常方便地上傳和下載文件
- 根據(jù)設(shè)備ID訪問不同的設(shè)備
- 支持 HTTP 代理 - 訪問您的設(shè)備的 Web
- 基于Xterm.js的全功能終端
- 部署簡單,使用方便
客戶端依賴
- libev - 高性能的事件循環(huán)庫
- mbedtls(polarssl)、CyaSSl(wolfssl)或者openssl - 如果您需要支持SSL
部署服務(wù)端
1 從Release頁面下載編譯好的二進(jìn)制文件或者自己編譯
git clone https://github.com/zhaojh329/rttys
cd ui
npm install
npm run build
cd ..
./build.sh linux amd64
2 認(rèn)證
- Token
生成一個 token:
$ rttys token
Please set a password:******
Your token is: 34762d07637276694b938d23f10d7164
使用 token:
$rttys -t 34762d07637276694b938d23f10d7164
- SSL 雙向認(rèn)證(mTLS)
您可以在配置文件中指定設(shè)備 CA 存儲(有效文件)或在 CLI 中指定設(shè)備 CA 存儲(參數(shù) ssl-cacert) 來啟用 mTLS。 存儲中沒有有效 CA 的設(shè)備將在 TLS 握手中斷開連接。
3 運(yùn)行服務(wù)
移動rttys可執(zhí)行程序到/usr/local/bin/
sudo mv rttys /usr/local/bin/
拷貝配置文件到/etc/rttys/
sudo mkdir /etc/rttys
sudo cp rttys.conf /etc/rttys/
創(chuàng)建一個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
要首次啟動該服務(wù),請執(zhí)行通常的systemctl操作
sudo systemctl daemon-reload
sudo systemctl enable rttys
sudo systemctl start rttys
可以通過以下方式停止服務(wù)
sudo systemctl stop rttys
4 數(shù)據(jù)庫準(zhǔn)備(Sqlite、MySQL 或者 Mariadb)
在數(shù)據(jù)庫實(shí)例上,以root用戶身份登錄到數(shù)據(jù)庫控制臺
mysql -u root -p
創(chuàng)建將由 Rttys 使用的數(shù)據(jù)庫用戶,通過密碼驗(yàn)證。本例使用 “rttys” 作為密碼。請為您的實(shí)例使用安全密碼
CREATE USER 'rttys' IDENTIFIED BY 'rttys';
使用 UTF-8 字符集和排序規(guī)則創(chuàng)建數(shù)據(jù)庫。確保使用 utf8mb4 字符集而不是 utf8,因?yàn)榍罢咧С只径嗾Z言平面 之外的所有 Unicode字符(包括emojis)。另外,根據(jù)您期望的內(nèi)容選擇排序規(guī)則。如有疑問,請使用 unicode_ci 或general_ci
CREATE DATABASE rttys CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
將數(shù)據(jù)庫上的所有權(quán)限授予上面創(chuàng)建的數(shù)據(jù)庫用戶
GRANT ALL PRIVILEGES ON rttys.* TO 'rttys';
FLUSH PRIVILEGES;
安裝rtty(針對Linux發(fā)行版)
安裝依賴
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
運(yùn)行rtty
將下面的參數(shù)替換為您自己的參數(shù)
sudo rtty -I 'My-device-ID' -h 'your-server' -p 5912 -a -v -d 'My Device Description'
如果您的 rttys 配置了一個 token,請加上如下參數(shù)(將下面的 token 替換為您自己生成的)
-t 34762d07637276694b938d23f10d7164
通過瀏覽器訪問
使用 Web 瀏覽器訪問您的服務(wù)器:
http://your-server-host:5913,然后點(diǎn)擊連接按鈕。
或者直接連接設(shè)備,無需 Web 登錄(需要在服務(wù)端配置設(shè)備白名單)
http://your-server-host:5913/connect/devid1
http://your-server-host:5913/connect/devid2
從本地傳輸文件到遠(yuǎn)程設(shè)備
rtty -R
從遠(yuǎn)程設(shè)備傳輸文件到本地
rtty -S test.txt
—END—
開源協(xié)議:MIT
開源地址:
https://github.com/zhaojh329/rtty