目录
原理说明
小米路由的系统是基于 OPENWRT 系统上改的,而有个地方是能够做到更新固件的时候保留配置文件,而防火墙文件/etc/config/firewall中恰好有一个配置为用户自定义配置,并且指定了位置为/etc/firewall.user,而且系统默认是有这个文件的,也就是说更新系统不会被删除,而这个防火墙自定义配置,事实上执行的是shell脚本,而且路由器启动防火墙的时候就会执行,也就是说,我们只需要把操作变更为将命令行写入这个配置文件,就能实现路由器重启后自动配置,也能让我们更新系统享受稳定的固件!
实操
下载降级版本
首先降级到 1.0.34 版本,通过小米路由管理后台,在“系统状态”中的 tab 页中,找到手动升级,并选择下载好降级包。
开启 SSH
降级后不要升级,先登录网页管理界面,登录后可以在地址栏上是这样的地址
1 | http://192.168.31.1/cgi-bin/luci/;stok=XXXXXXXXXXXXXXXXXXXXXXXXXX/web/home#router |
将 XXX 后面的包括斜杠”/“在内的所有文字替换成
1 | /api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20nvram%20set%20ssh_en%3D1%3B%20nvram%20commit%3B%20sed%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%5C%22debug%5C%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%3B%20%2Fetc%2Finit.d%2Fdropbear%20start%3B |
回车后会返回
1 | {"code": 0} |
这个时候 SSH 就已经打开了。
修改 SSH 密码
开启 SSH 后,将 XXX 后面的包括斜杠”/“在内的所有文字替换成如下以修改密码为admin
1 | /api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20echo%20-e%20'admin%5Cnadmin'%20%7C%20passwd%20root%3B |
连接 SSH
若要使用 SSH ,用以下代码接口
1 | ssh -o HostKeyAlgorithms=ssh-rsa root@192.168.31.1 |
修改配置文件,确保永久 SSH
原理说明中,描述了有个文件是可以不被更新固件所清除的配置,现在我们对这个文件做相应脚本,确保固件升级后,也会自动执行,从而达到永久开启 SSH。
- 先打开文件
1
2
vi /etc/firewall.user - 在文件内容的最下方加入以下代码
1
2
3
4
5
6
7ssh
nvram set ssh_en=1
nvram commit
sed -i 's/channel=.*/channel="debug"/g' /etc/init.d/dropbear
/etc/init.d/dropbear start
echo -e 'admin\nadmin' | passwd root - 保存退出该文件
先按ESC退 出 VI 的 insert 或 append 模式,输入以下代码保持退出该文件1
:wq
更新固件
这个时候我们就可以更新固件了。
不能恢复出厂设置,否则 SSH 将会失效!!!