你好你好

我随便写,你随便看

一次简单的 N3 SSH 权限获取

因为最近我的Beszel总是报cpu卡死,后台看了详情发现是很规律的,即重启后cpu占用率一点点升高,但是我本身并未挂什么服务在docker上。我觉得很奇怪 ,于是恢复出厂。但是恢复出厂后问题依旧,而此时我的docker容器已经全部消失,拾光坞(名字实在难打,下称sgw)官方插件也消失了,说明其真真切切恢复出厂了。于是我先求助厂商,厂商答应周一上班帮我看看。但是厂商最后也并未找到原因(因为看top完全看不出来)于是厂商放弃,告诉我一切正常。但是cpu满载自动重启我又确实遇到,于是我很无奈。就有了此次获取ssh的尝试。 #1 创建特权容器 sgw本身支持特权容器,于是我使用portainer创建了一个library/ubuntu:latest。之所以不用sgw自带的客户端或者web端是因为其不支持粘贴命令,我非常懒。创建特权容器后,我设置其网络模式为host,存储设置为/:/host 。 #2 exec进入容器 很简单的,进入了ubuntu后chroot /host拿到sgw的shell。然后cd到mnt。ls能看到非常多的usb设备,如果你是n3,你的hdd盘大概率是usb1。cd进去能看到你的用户名,例如wow。所以你最终应该在/mnt/usb1/wow。 #3 来点攒劲的东西 sgw默认是一个定制版linux,所以n3这种设备很多地方是不可写的,n3自带openssh但是很可惜/etc/ssh文件夹下不可写。 但是世界上ssh客户端又不止openssh一个,于是我直接使用dropbear。 #4 ssh的获取 但是github上的官方项目没有编译好的。于是我使用本地的一个ubuntu交叉编译了arm64的dropbear。在第二步中我们cd到的文件夹是你自己nas的根目录,即smb或者webdav的根目录,这个目录肯定是可写的。于是我mkdir ssh && cd ./ssh。此时你有两个办法,第一,先把编译好的东西上传到某个网盘然后wget下来。但是我说了,你现在在smb根目录,所以我直接将smb挂载成windows Z 盘。然后复制到ssh下。在sgw的docker exec到ubuntu中去ssh下,初始化一下db。在创建好256指纹后,在我本身虚拟机ubuntu上创建了个密钥对,因为swg的很多分区是写死的。所以我没办法,我只能在ssh下把密钥对的一半丢进去了。然后起一个db实例。端口写在9999。但是sgw默认整了个防火墙,要命。我又去放通了9999。最后使用密钥对成功拿到n3的ssh权限。 #5 cpu异常但是top看不到的原因 拿到ssh我肯定要去看到底谁在搞事。一看top,草了,没有任何进程大于3%,而且就四五个进程在频繁活动。加起来也就5%占用。见鬼了,我写了个小脚本丢到ssh目录下chmod赋权跑了一下。结果是emmc坏了。哦,那就是pcdn的锅了(我已经不跑两年了怎么会在这时候坏?)。于是我赶紧df -h看,最后发现这emmc是专门用来跑pcdn的(星光版)于是我手工干掉了这个频繁写日志的进程,因为其触发emmc坏块。没办法降cpu。在干掉后防复活我是rm还是改它名我忘了。反正好了。大概就这样。有问题可以问我,提供有偿远程,因为我觉得教程写很清楚了,不能看不懂吧。

January 1, 2026 · Sue