本帖最后由 sunset_glow 于 2022-2-17 21:33 编辑
由于恩山编辑器过于难用,好不容易排好版,点击发表帖子,又提示 461请求被WEB防火墙拦截
所以,正文写在了 CSDN,关于小米路由器升级系统保留SSH的简单方法(RedmiAX5实验)
不得不说,恩山的这个论坛基础功能做的是真差劲!!!
那就重新编辑一遍。
-------------------------------------------------
关于小米路由器升级系统保留SSH的简单方法(RedmiAX5实验)一、前言截至2022.2.17,AX5官方固件共有如下几个版本:
AX5_1.0.16.binAX5_1.0.26.binAX5_1.0.33.binAX5_1.0.44.binAX5_1.0.49.bin
下载地址:https://cloud.189.cn/web/share?code=uYzEbmI3M3me(访问码:9phb)
其中,1.0.16、1.0.26、1.0.33 版本可以通过特殊方法获取到 SSH。
相关教程:AX3600/AX1800/AX5/AC2100官方固件开启SSH方法
但是,当重新刷写固件(升级、降级都算)后,SSH就会被关闭,如果升到1.0.44、1.0.49,连特殊方法都用不了了。
虽然网上有些大佬通过修改bdata分区等操作来“固化”SSH,但是过于麻烦。
本文给出一种十分简单方便的方法,使得路由器升级后自动开启SSH。
二、原理小米路由器官方固件升级后,并非所有的配置文件都被覆盖重置。其中就有这么一个文件 /etc/firewall.user,此文件在系统升级后不会被重置。
而且更加绝妙的是,在这个文件里我们可以写任意shell脚本命令,并且开机后会被 /etc/init.d/firewall 执行(因为/etc/config/firewall 文件 include 了 /etc/firewall.user)。所以,我们可以以此为入口,执行一些脚本命令,在开机时自动地把SSH打开。
三、步骤
1. 在 /etc/firewall.user 文件中,添加一句 source /etc/basic_settings/basefile.shecho -e "\nsource /etc/basic_settings/basefile.sh" >> /etc/firewall.user复制代码
虽然我们可以直接写脚本,但毕竟这里是写防火墙规则的地方,为了看起来美观,我们只source一个脚本,把主要命令写在别的地方。
2. 创建 basic_settings 文件夹、basefile.sh 文件、my_script.sh 文件
mkdir /etc/basic_settings
touch /etc/basic_settings/basefile.sh
touch /etc/basic_settings/my_script.sh
chmod 755 /etc/basic_settings/basefile.sh
chmod 755 /etc/basic_settings/my_script.sh
复制代码
3. 编辑 /etc/basic_settings/basefile.sh 填写以下内容
#!/bin/sh
echo "source /etc/basic_settings/my_script.sh; exit 0" > /etc/rc.local复制代码
4. 编辑 /etc/basic_settings/my_script.sh 填写以下内容
#!/bin/sh
#check ssh
ver_flag="$(uci -c /usr/share/xiaoqiang get xiaoqiang_version.version.CHANNEL)"
if [ "$(nvram get ssh_en)" != "1" -o "$ver_flag" == "release" ]; then
echo "$(date) : 本次开机ssh_en被关闭或者版本标记被重置,您可能进行了固件升级。" >> /tmp/my_log.txt
nvram set ssh_en=1
nvram commit
uci -c /usr/share/xiaoqiang set xiaoqiang_version.version.CHANNEL='stable'
uci -c /usr/share/xiaoqiang commit xiaoqiang_version.version
echo "$(date) :已重新开启ssh_en,并设置版本标记为stable。" >> /tmp/my_log.txt
/etc/init.d/dropbear enabled
if [ $? == "1" ]; then
echo "$(date) :dropbear开机自启动被关闭,现重新开启。" >> /tmp/my_log.txt
/etc/init.d/dropbear enable
fi
/etc/init.d/dropbear restart
echo -e "admin\nadmin" | passwd root
echo "$(date) :已将root密码重置为 admin" >> /tmp/my_log.txt
fi
复制代码
注: 单独又分一个 my_script.sh 文件是因为 /etc/init.d/firewall 启动顺序比较靠前(顺序12),像我们上述的用户自定义脚本命令其实是越晚执行越靠谱,所以通过 basefile.sh 来操作一些基础的文件操作或者是需要早执行的操作,在 rc.local 中执行 my_script.sh 。 /etc/rc.local 在开机时会被 /etc/init.d/done 调用。(开机执行顺序95)
这样系统升级后,开机就会检测SSH状态,如果被关闭,就会自动把 SSH 打开,并且重置 root 密码为 admin。
注2:版本标记设置为 stable,路由器就会认为是 开发版。release -> 稳定版、current -> 内测版。
四、其他只针对AX5做了测试,其他型号(AX1800、AX6、AX3600等)未测试,我觉得应该也行的,有测试成功的,请在评论区回复一下。