本帖最后由 sunset_glow 于 2022-2-17 21:33 编辑
由于恩山编辑器过于难用,好不容易排好版,点击发表帖子,又提示 461请求被WEB防火墙拦截 所以,正文写在了 CSDN,关于小米路由器升级系统保留SSH的简单方法(RedmiAX5实验)
不得不说,恩山的这个论坛基础功能做的是真差劲!!! 那就重新编辑一遍。 ------------------------------------------------- 关于小米路由器升级系统保留SSH的简单方法(RedmiAX5实验)一、前言截至2022.2.17,AX5官方固件共有如下几个版本: 其中,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.sh- echo -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等)未测试,我觉得应该也行的,有测试成功的,请在评论区回复一下。
|