2024年2月实测仍然生效
上个月在网上看到了路由器开启SSH的方法。在家里的红米AX5上尝试了一下成功。然而今天发现连不上了:
ssh: connect to host 192.168.31.1 port 22: Connection refused
高度怀疑是固件自动更新了(现在是1.0.33),于是重新设置一下。由于网络原帖写得比较乱,所以在这里整理一下,分为两步:
第一步:开启SSH
假设路由器 IP 是 192.168.31.1,首先用浏览器正常访问自己的路由器(登录),把网址复制下来,大概是
http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/web/home
注意 <STOK> 是一串长度为32(我这里如此)的字符串,例如6J2n9KvR4c3pX5gW8D7m1L0tF9aZ4qCw
然后,把上面地址中后半部分 /web/home 替换成 /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,也就是:
http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/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
此时浏览器会显示
{"code":0}
这一堆东西翻译一下实际上是这样子的
/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h; nvram set ssh_en=1; nvram commit; sed -i 's/channel=.*/channel=\"debug\"/g' /etc/init.d/dropbear; /etc/init.d/dropbear start;
第二步:改临时密码
同样地,在浏览器地址栏输入:
http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h%3B%20echo%20-e%20'admin%5Cnadmin'%20%7C%20passwd%20root%3B
此时浏览器同样会显示
{"code":0}
翻译一下是这样子的:
/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=-h; echo -e 'admin\nadmin' | passwd root;
意思是用户名为root,密码是admin。
第三步:登录 SSH 改正式密码
然后马上用root登陆ssh,密码是admin,再修改密码。
当初写这篇文章是 2021 年,今天(2024年)我用 macOS 去尝试时发现出现了这个问题:
no matching host key type found. Their offer: ssh-rsa
想想也正常,2024年 openssh 早就废弃 ssh-rsa 了,因此我可以在 ~/.ssh/config 里面单独为这个路由器添加例外
Host router
HostName 192.168.31.1
User root
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
以后只要 ssh router 就能登录了。登录之后自己用 passwd root 修改自己的 root 密码
路由器信息
路由器登录界面搞了一个很怪的风格:
BusyBox v1.25.1 (2020-12-30 07:27:05 UTC) built-in shell (ash)
-----------------------------------------------------
Welcome to XiaoQiang!
-----------------------------------------------------
$$$$$$\ $$$$$$$\ $$$$$$$$\ $$\ $$\ $$$$$$\ $$\ $$\
$$ __$$\ $$ __$$\ $$ _____| $$ | $$ | $$ __$$\ $$ | $$ |
$$ / $$ |$$ | $$ |$$ | $$ | $$ | $$ / $$ |$$ |$$ /
$$$$$$$$ |$$$$$$$ |$$$$$\ $$ | $$ | $$ | $$ |$$$$$ /
$$ __$$ |$$ __$$< $$ __| $$ | $$ | $$ | $$ |$$ $$<
$$ | $$ |$$ | $$ |$$ | $$ | $$ | $$ | $$ |$$ |\$$\
$$ | $$ |$$ | $$ |$$$$$$$$\ $$$$$$$$$ | $$$$$$ |$$ | \$$\
\__| \__|\__| \__|\________| \_________/ \______/ \__| \__|
路由器的/etc/os-release如下:
NAME="OpenWrt"
VERSION="18.06-SNAPSHOT"
ID="openwrt"
ID_LIKE="lede openwrt"
PRETTY_NAME="OpenWrt 18.06-SNAPSHOT"
VERSION_ID="18.06-snapshot"
HOME_URL="http://openwrt.org/"
BUG_URL="http://bugs.openwrt.org/"
SUPPORT_URL="http://forum.lede-project.org/"
BUILD_ID="unknown"
LEDE_BOARD="ipq60xx/MiWiFi"
LEDE_ARCH="arm_cortex-a7"
LEDE_TAINTS="no-all busybox"
LEDE_DEVICE_MANUFACTURER="OpenWrt"
LEDE_DEVICE_MANUFACTURER_URL="http://openwrt.org/"
LEDE_DEVICE_PRODUCT="Generic"
LEDE_DEVICE_REVISION="v0"
LEDE_RELEASE="OpenWrt 18.06-SNAPSHOT unknown"
禁止路由器自动升级固件
红米路由器很诡异,无法从web端去设置这选项。后来去Telegram群里问了一下才知道,要安装MiWiFiapp去设置。
中继模式也能用这种方法
只不过 IP 不是 192.168.31.1,而是要换成路由器自己的IP,末尾不是 1,例如 192.168.31.85 之类。

也算是命令执行漏洞把,看样子现在好像已经修复了,AX3000T,251212
stok=是替换括号里的内容吗?试了几次都是显示无法连接网络,还请您有时间的时候稍微详细点解答一下,十分感谢
你先用浏览器直接访问正常的路由器,登陆进去之后在浏览器地址栏里面就能看到stok=后面的内容,每个人都是独一无二的
stok= 替换这个《》里面的内容还是说明呢,试了很多次都不知道替换那一部分的内容