固件降级
首先需要降级固件版本到 1.0.336,下载地址
开启 ssh
降级成功后从网页登录小米路由器后台,F12 进入控制台,粘贴如下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| function getSTOK() { let match = location.href.match(/;stok=(.*?)\//) if (!match) { return null } return match[1] }
function execute(stok, command) { command = encodeURIComponent(command) let path = `/cgi-bin/luci/;stok=${stok}/api/misystem/set_config_iotdev?bssid=SteelyWing&user_id=SteelyWing&ssid=-h%0A${command}%0A` console.log(path) return fetch(new Request(location.origin + path)) }
function enableSSH() { stok = getSTOK() if (!stok) { console.error('stok not found in URL') return } console.log(`stok = "${stok}"`)
password = prompt('Input new SSH password') if (!password) { console.error('You must input password') return }
execute( stok, ` nvram set ssh_en=1 nvram commit sed -i 's/channel=.*/channel=\\"debug\\"/g' /etc/init.d/dropbear /etc/init.d/dropbear start ` ) .then((response) => response.text()) .then((text) => console.log(text)) console.log('New SSH password: ' + password) execute(stok, `echo -e "${password}\\n${password}" | passwd root`) .then((response) => response.text()) .then((text) => console.log(text)) }
enableSSH()
|
回车,并在弹出的窗口输入 ssh 密码
连接 ssh
终端输入 ssh root@192.168.31.1
,输入密码后建立连接
支持升级
方案一
每次升级后手动开启 SSH 和 dropbear
原理:小米路由器固件升级后, /etc/firewall.user
,此文件在系统升级后不会被重置
终端输入
1
| echo -e "\nsource /etc/basic_settings/basefile.sh" >> /etc/firewall.user
|
创建 basic_settings 文件夹、basefile.sh 文件、my_script.sh 文件
1 2 3 4 5
| 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
|
编辑 /etc/basic_settings/basefile.sh
填写以下内容
1 2
| #!/bin/sh echo "source /etc/basic_settings/my_script.sh; exit 0" > /etc/rc.local
|
编辑 /etc/basic_settings/my_script.sh
填写以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #!/bin/sh
ver_flag="$(uci -c /usr/share/xiaoqiang get xiaoqiang_version.version.CHANNEL)" if [ "$(nvram get ssh_en)" != "1" -o "$ver_flag" == "release" ]; then 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 /etc/init.d/dropbear enabled if [ $? == "1" ]; then /etc/init.d/dropbear enable fi /etc/init.d/dropbear restart echo -e "admin\nadmin" | passwd root fi
|
之后可以选择手动从官网下载安装包升级,默认的 ssh 密码为 admin
方案二
直接固化 SSH
首先查看 bdata 分区的位置,刷入解锁脚本(A5 5A 00 00)
1
| sh -c "nanddump -f /tmp/crash.bin /dev/$(cat /proc/mtd | grep '"crash"' | grep -oE '^mtd[0-9]{1,2}') >/dev/null 2>&1 && echo -en '\xA5\x5A\x00\x00'>/tmp/unlock.bin&&tail -c+5 /tmp/crash.bin|cat /tmp/unlock.bin - > /tmp/crashunlock.bin && mtd write /tmp/crashunlock.bin crash"
|
重启
开启 telnet、ssh、uart
73 73 68 5F 65 6E 3D 31 00 75 61 72 74 5F 65 6E 3D 31 00 74 65 6C 6E 65 74 5F 65 6E 3D 31 00
ssh_en=1.uart_en=1.telnet_en=1.
1 2 3 4 5 6
| sh -c "nanddump -f /tmp/bdata.bin /dev/\`cat /proc/mtd|grep -i 'Bdata'| grep -oE '^mtd[0-9]{1,2}'\` >/dev/null 2>&1" sh -c "dd if=/dev/zero of='/tmp/bdata1.bin' ibs=65532 count=1 > /dev/null 2>&1 " sh -c " echo -en '\x73\x73\x68\x5f\x65\x6e\x3d\x31\x00\x75\x61\x72\x74\x5f\x65\x6e\x3d\x31\x00\x74\x65\x6c\x6e\x65\x74\x5f\x65\x6e\x3d\x31\x00' > /tmp/bdata2.bin" sh -c "head -c1000 /tmp/bdata.bin|tail -c+5|tr '\x00' '\n'|sed -E ':a;N;\$!ba;s/\n+/\n/g'|head -n-1| sed -r '/^(telnet_en|ssh_en|uart_en)=/d' > /tmp/bdata3.bin" sh -c "cat /tmp/bdata3.bin|tr '\x0a' '\x00'| cat - /tmp/bdata2.bin > /tmp/bdata4.bin" sh -c "dd conv=notrunc if=/tmp/bdata4.bin of=/tmp/bdata1.bin >/dev/null 2>&1 && gzip -1 -c /tmp/bdata1.bin | tail -c8 | head -c4 | cat - /tmp/bdata1.bin > /tmp/bdata.mod.bin"
|
重新写入修改好的脚本
1
| mtd write /tmp/bdata.mod.bin Bdata||mtd write /tmp/bdata.mod.bin bdata
|
重启以后可以通过
查看是否开启成功,即末尾有显示:
……..
……..
ssh_en=1
uart_en=1
telnet_en=1
最后执行清除解锁命令:
结束以后恢复出厂设置
AX1800 的 ssh 固化已完成,每次升级固件或重置固件都需要登录 telnet
telnet 的账号密码
账号:root
密码:根据 SN 号计算,见:小米 AX1800 通过 SN 计算初始密码)
在 telnet 中开启 ssh
1 2 3 4 5
| sed -i 's/channel=.*/channel=\"debug\"/g' /etc/init.d/dropbear
/etc/init.d/dropbear start
echo -e 'admin\nadmin' | passwd root
|
设置之后,telnet 和 ssh 的账号密码如下
用户名:root
密码:admin
方案三
前提条件:固件自带 bdata 命令,执行命令查看
有输出就说明固件自带 bdata 命令,接着执行,之后重启
1 2 3 4
| bdata set telnet_en=1 bdata set ssh_en=1 bdata set uart_en=1 bdata commit
|
我测试没有通过,重启失效
参考
小米 AX1800 开 SSH 权限
关于小米路由器升级系统保留 SSH 的简单方法(RedmiAX5 实验)
命令行解锁 Crash 分区及 Bdata 分区固化