采集 Terminal API 与 BatchMode 公钥探测,硬件 tab 主卡精简(IP 常显、 DSM 版本进机身详情),明细用 hwFold;文档同步 SSH 已通与修复入口。
165 lines
6 KiB
Markdown
165 lines
6 KiB
Markdown
# NAS / DSM 可观测(DS224+ · 实测)
|
||
|
||
> 2026-07-10 · 用 `linuxjoy` 账号只读登录 DSM API 摸底
|
||
> 凭据仅存本机 `~/.config/nas/dsm.env`(chmod 600),**禁止入库**
|
||
> **已落地**:`joy.dashboard.nas_dsm.collect_nas_dsm` → `dashboard.infra.nas.dsm` → 硬件 tab「NAS」
|
||
> **总手册**(挂载 / SSH / 安全 / 索引):[`nas.md`](./nas.md)
|
||
|
||
---
|
||
|
||
## 1. 访问结论
|
||
|
||
| 通道 | 结果 |
|
||
|------|------|
|
||
| `https://192.168.1.188:5001` DSM Web | ✅ |
|
||
| DSM API `SYNO.API.Auth` v7 + `entry.cgi` | ✅ 登录成功,权限够读机身/存储/共享 |
|
||
| NFS 挂载 `shared-context`(Mac) | ✅ 内容面;与 volume1 对应 |
|
||
| SSH `linuxjoy@192.168.1.188` 密码 | ❌ 仅 `publickey`,密码认证未开 |
|
||
| 建议 joy 采集 | **优先 DSM API(curl -sk)**;内容面用已挂载路径;不必依赖 SSH |
|
||
|
||
登录示例(勿把密码写进脚本仓库):
|
||
|
||
```bash
|
||
# sid 缓存 ~/.config/nas/dsm.sid
|
||
curl -sk -G 'https://192.168.1.188:5001/webapi/entry.cgi' \
|
||
--data-urlencode 'api=SYNO.API.Auth' --data-urlencode 'version=7' \
|
||
--data-urlencode 'method=login' --data-urlencode "account=$NAS_USER" \
|
||
--data-urlencode "passwd=$NAS_PASS" --data-urlencode 'session=Core' \
|
||
--data-urlencode 'format=sid'
|
||
```
|
||
|
||
Python `urllib` 对本机 DSM TLS 偶发 EOF;**生产采集用 curl 子进程更稳**。
|
||
|
||
---
|
||
|
||
## 2. 机身快照(实测)
|
||
|
||
| 项 | 值 |
|
||
|----|-----|
|
||
| 型号 | **DS224+** |
|
||
| DSM | **7.3.2-86009 Update 4** |
|
||
| CPU | Intel Celeron **J4125** 4 核 @2.0GHz |
|
||
| 内存 | **6 GB**(real_usage ~15%) |
|
||
| 系统温度 | **~41°C**,无温度告警 |
|
||
| 运行时间 | ~114h(采样时) |
|
||
| 主机名 | `feibisi-NAS` |
|
||
| 网卡 | eth0 **1G connected** `192.168.1.188`;eth1 disconnected |
|
||
| UPS | USB 识别 **APC UPS**(专用 UPS API 对本账号 102 无权限,但 system.usb_dev 可见) |
|
||
| 风扇 | cool_fan=yes,双风扇 cool 模式 |
|
||
| 健康 widget | `system_ok` |
|
||
|
||
### 存储
|
||
|
||
| 项 | 值 |
|
||
|----|-----|
|
||
| 盘 | 2× **WD80EFPX** 8TB(Drive1/2),SMART **normal**,温度 **35–37°C** |
|
||
| 池 | RAID **1**(`reuse_1`),status normal |
|
||
| 卷 | **volume1** btrfs,~7.0T total,~2.6T used(~37%),fs_normal |
|
||
| 盘 IO | 低负载(util 采样时个位数%) |
|
||
|
||
### 文件服务
|
||
|
||
| 项 | 值 |
|
||
|----|-----|
|
||
| NFS | **已开**(v4 未开 minor);与 Mac NFS 挂载一致 |
|
||
| SMB | 配置可读 |
|
||
| 当前连接 | NFS(Mac `.104`、其它内网)+ DSM Web/File Station 会话 |
|
||
|
||
### 共享文件夹(11)
|
||
|
||
含:`shared-context`(VM SHARED)、`docker`、`ActiveBackupforBusiness`、`homes`、`Download`、`iCloudPhotos`、`music`/`photo`/`video`/`web`/`web_packages`。
|
||
|
||
### 套件(节选·running)
|
||
|
||
ActiveBackup、ActiveBackup-Office365、ActiveInsight、CloudSync、Git、Node.js_v20、SnapshotReplication、SynologyDrive 等(共 48 包量级)。
|
||
|
||
### 日志噪声
|
||
|
||
Syslog 近段 **error 多为 Synology Office 自动更新失败**(重复),非盘故障。
|
||
|
||
---
|
||
|
||
## 3. 可用 API 白名单(joy 采集建议)
|
||
|
||
| API | method | 用途 | 实测 |
|
||
|-----|--------|------|------|
|
||
| `SYNO.API.Auth` | login | 会话 | ✅ |
|
||
| `SYNO.Core.System` | info | 型号/固件/温度/UPS USB/uptime | ✅ |
|
||
| `SYNO.Core.System.Utilization` | get | CPU/内存/网/NFS OPS | ✅ |
|
||
| `SYNO.Storage.CGI.Storage` | load_info | 盘 SMART 状态/温度、卷用量、RAID | ✅ **机身核心** |
|
||
| `SYNO.Core.Share` | list | 共享列表 | ✅ |
|
||
| `SYNO.Core.CurrentConnection` | list | NFS/SMB/HTTP 会话 | ✅ 通道面 |
|
||
| `SYNO.Core.Package` | list | 套件 running | ✅ |
|
||
| `SYNO.Core.Network.Ethernet` | list | 网卡速度/链路 | ✅ |
|
||
| `SYNO.Core.Hardware.FanSpeed` | get | 风扇模式 | ✅ |
|
||
| `SYNO.Core.System.SystemHealth` | get | 健康摘要 | ✅ |
|
||
| `SYNO.Core.FileServ.NFS` | get | NFS 开关 | ✅ |
|
||
| `SYNO.Core.SyslogClient.Log` | list | 最近 warn/error 计数 | ✅ 慎用(量大) |
|
||
|
||
权限不足或无需:独立 SMART CGI(114)、Core.Hardware.UPS(102)、部分 Storage.Disk.list(101)。
|
||
|
||
---
|
||
|
||
## 4. 建议进 joy 的字段(硬件 · NAS 卡)
|
||
|
||
**L0 机身(每 1–5 min,DSM API)**
|
||
|
||
```text
|
||
nas.dsm: {
|
||
ok, model, dsm_ver, hostname, uptime,
|
||
sys_temp_c, temp_warn,
|
||
cpu: {series, cores, load_1m, ...}, mem_pct,
|
||
eth0: {ip, speed, status},
|
||
pool: {raid, status},
|
||
volume: {used_gb, total_gb, used_pct, fs, status},
|
||
disks: [{slot, model, temp_c, smart_status, status}],
|
||
ups_usb, fan_mode,
|
||
terminal: {enable_ssh, enable_telnet, ssh_port}, // 2026-07-10
|
||
ssh: {ok, target, error}, // BatchMode 公钥探测
|
||
attention[]
|
||
}
|
||
```
|
||
|
||
**L1 通道(同轮或稍慢)**
|
||
|
||
```text
|
||
nas.channels: {
|
||
nfs_enabled, smb_enabled?,
|
||
connections: {nfs_n, http_n, total},
|
||
mount_mac_ok, mount_devops_ok, // 现有
|
||
write_probe_ok // shared-context 写删探针
|
||
}
|
||
# SSH 修复:linuxjoy scripts/mac/nas-ssh.sh(不进 joy 写路径)
|
||
```
|
||
|
||
**L2 内容(日更/手动,勿每轮 du)**
|
||
|
||
- 白名单目录 entry 数 / 可选日 `du` 缓存
|
||
- **禁止** secrets 内容进 JSON
|
||
|
||
展示位置:继续 **硬件 · NAS**(粮仓),不进神州、不进神兽 badge 主公式。
|
||
|
||
---
|
||
|
||
## 5. 实现要点
|
||
|
||
1. `collect_nas_dsm()`:读 `~/.config/nas/dsm.env`,curl 登录,缓存 sid ~10–30 min。
|
||
2. 失败降级:无账号/登录失败 → 仅保留现有 mount+df。
|
||
3. TLS:`curl -sk` 或等价;勿用会 EOF 的默认 SSL 栈硬扛。
|
||
4. 密码不进 HANDOFF / git / dashboard 明文。
|
||
5. SSH 公钥已通(2026-07-10);`collect_nas_dsm` 每轮 BatchMode 探测 `ssh nas`,UI 硬件卡展示。复发:`linuxjoy/scripts/mac/nas-ssh.sh fix`。
|
||
6. 建议轮换聊天中暴露过的密码,并更新 `~/.config/nas/dsm.env`。
|
||
|
||
---
|
||
|
||
## 6. 安全提醒
|
||
|
||
本次会话中密码曾出现在聊天中。建议在 DSM 中:
|
||
|
||
1. 修改 `linuxjoy` 密码,并更新 `~/.config/nas/dsm.env`
|
||
2. 或新建只读监控用户 + 最小权限
|
||
3. 需要 SSH 时单独开公钥,不要开密码 SSH 到公网
|
||
|
||
---
|
||
|
||
*实测账号:linuxjoy(本地 env)。SSH 密码认证未启用。*
|