《開源精選》是我們分享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