一、前期准备
硬件准备:一台小米路由器 小米7000 固件版本:1.0.111;一个分区为EXT4格式且可用空间大于32GB的U盘
软件准备:MobaXterm或其他终端软件。
SSH密码:由序列号计算SSH密码
二、思路
利用路由自身所带的 USB 口来挂载外置存储安装小米7000自带的 Simple Docker 来安装 nginx:alpine-slim 容器(在 Docker 中使用 nginx:alpine-slim 镜像可以快速构建一个运行在容器中的 Web 服务器,该镜像支持多种配置选项和插件,可以满足不同场景下的需求。),进而借助该容器的 SSH 终端拿到路由临时 SSH 权限从而进一步拿到永久 SSH 权限。
三、解锁 SSH
1. 安装小米 Simple Docker
插入U盘,进入小米路由固件管理界面,依次选择“存储功能 → Docker → 安装 Docker”
2. 运行Docker,安装第三方管理
点击“运行Docker → 安装第三方管理”,安装完毕后点击“管理Docker”,默认用户名和密码为admin,点击“登录”。
3.进入存储管理,记录USB设备名字。
点击存储管理,如果下面的列表为空,则创建一个卷。点击卷右侧的详情,挂载点应该为/mnt/usb-******/mi_docker/lib/docker/volumes/***。记住这个usb-******,例如我的是usb-2b5727be。
4.拉取 nginx:alpine-slim 镜像
点击镜像管理,点击拉取,拉取 nginx:alpine-slim 镜像。
5. 运行 alpine-slim 镜像
点击新拉取的镜像的右侧绿色运行按钮,选择简单模式,容器名称随意。目录挂载为/mnt/usb-******/mi_docker/../../..:/real_root,点击运行。(其中 usb-****** 是你自己之前记录的设备名)
6.进入终端
点击容器管理,选择刚才创建的容器,进入终端。
7. 输入以下指令,解锁 SSH
chroot /real_root
sed -i '/flg_ssh=`nvram get ssh_en`/{:loop; N; /\n.*channel=`\/sbin\/uci get \/usr\/share\/xiaoqiang\/xiaoqiang_version.version.CHANNEL`\n.*return 0\n.*fi/!b loop; d}'
/etc/init.d/dropbear
/etc/init.d/dropbear start
通过 MobaXterm 连接路由器的 SSH,进行后面的步骤。
四、解决重启后 SSH 失效的问题(软固化)
通过MobaXterm连接路由器的 SSH 后,执行以下指令:
nvram set ssh_en=1
nvram set telnet_en=1
nvram set boot_wait=on
nvram commit
sed -i 's/channel=.*/channel="debug"/g' /etc/init.d/dropbear
/etc/init.d/dropbear restart
echo -e 'admin\nadmin' | passwd root
路由器重启后,dropbear 文件会恢复成未修改以前的样子,因此要添加一个自启脚本,路由器每次启动,都会自动执行脚本,修改 dropbear 文件,开启 SSH 。此步骤可以在线获取脚本。
在线方法:
mkdir /data/auto_ssh && cd /data/auto_ssh
curl -O https://cdn.jsdelivr.net/gh/lemoeo/AX6S@main/auto\_ssh.sh
chmod +x auto_ssh.sh
uci set firewall.auto_ssh=include
uci set firewall.auto_ssh.type='script'
uci set firewall.auto_ssh.path='/data/auto_ssh/auto_ssh.sh'
uci set firewall.auto_ssh.enabled='1'
uci commit firewall
五、固化 SSH
通过 MobaXterm 连接路由器的 SSH 后,执行以下指令(执行后会自动重启):
zz=$(dd if=/dev/zero bs=1 count=2 2>/dev/null) ; printf '\xA5\x5A%c%c' $zz $zz | mtd write - crash
reboot
等待路由器重启后,重新连接 SSH ,并执行以下指令(执行后会自动重启):
nvram set ssh_en=1
nvram set uart_en=1
nvram set boot_wait=on
nvram commit
bdata set ssh_en=1
bdata set telnet_en=1
bdata set uart_en=1
bdata set boot_wait=on
bdata commit
reboot
等待路由器重启后,重新连接ssh,并执行以下指令(执行后会自动重启):
mtd erase crash
reboot
等待路由器重启后,重新连接 SSH ,固化完成。
六、提升 Docker 权限
通过 MobaXterm 连接路由器的 SSH 后,执行以下指令(执行后会自动重启):
sed -i "s/authorization_plugins .*/authorization_plugins ''/g" /etc/config/mi_docker
reboot
七、注意事项
与红米 AX6 类似,每次升级固件或重置固件都需要先 Telnet ,再在 Telnet 中开启 SSH,
具体方法为:
使用 MobaXterm 通过 Telnet 连接路由器,用户名为 root ,密码为初始密码,输入后即可登入路由器 Telnet 后台。
通过 Telnet 开启 SSH ,并修改 root 密码为 admin ,命令如下:
sed -i '/flg_ssh=`nvram get ssh_en`/{:loop; N; /\n.*channel=`\/sbin\/uci get \/usr\/share\/xiaoqiang\/xiaoqiang_version.version.CHANNEL`\n.*return 0\n.*fi/!b loop; d}' /etc/init.d/dropbear
/etc/init.d/dropbear restart
echo -e 'admin\nadmin' | passwd root
使用 MobaXterm 通过 SSH 连接路由器,用户名为 root ,密码为 admin ,输入后即可登入路由器 SSH 后台,登入后再做一遍第三步软固化即可。
八、总结
本文通过利用路由自身所带的 USB 口来挂载外置存储安装小米7000自带的 Simple Docker 来安装 nginx:alpine-slim 容器,进而借助该容器的 SSH 终端拿到路由临时 SSH 权限从而进一步拿到永久 SSH 权限,理论上小米9000和万兆路由器均可以使用此方法解锁 SSH,只需要买一个64GB容量的U盘即可,解锁后的小米 7000 路由器就可以通过 SSH 终端直接安装 Shell clash、Adguard Home、Alist等常用软件了。