User 'root' has invalid shell, rejected
zsh: applet not found
背景
- openwrt 无法登陆, 正确配置 ssh key 和 password, 均无法登陆, 一直提示重新输入密码.
- openwrt 网页可以正常打开, 登陆
- openwrt 使用 dropbear 代替 openssh-server 进行 ssh 管理
解决步骤
- 登陆网页, 打开系统日志
- 尝试 ssh 登陆
- ssh 登陆失败后刷新系统日志页面, 并检查最新日志
- 日志里面显示
User 'root' has invalid shell, rejected
- 系统 → 软件包 → 搜索安装 Custom command(这个限制挺多的, 不支持管道, 执行结果不显示, 一直 loading)
- 打开 F12, 添加执行
cat /etc/passwd
, F12 里面最新的 cfg 开头的 XHR 请求即为命令执行的结果. /etc/passwd
里面 root 的 shell 是 /usr/bin/zsh (也可以自己再测试下文件是否存在)- 系统 → 软件包 → 搜索安装 zsh
- 尝试 ssh 登陆, 如果成功即结束
- ssh 日志提示
zsh: applet not found
,Error relocating /usr/bin/zsh: xxx: symbol not found
- 将
/etc/passwd
的内容在外部编辑, 将 root shell 编写为/bin/ash
, 然后通过Custom command
使用 wget -O 进行文件覆盖(最好提前备份) - 在 https://busybox.net/downloads/binaries/ 根据 CPU 版本下载对应版本 busybox, 然后通过
Custom command
使用 wget -O 进行文件覆盖/bin/busybox
(最好提前备份)
如 状态页面显示 CPU 架构为:
ARMv7 Processor rev 0 (v7l)
, 则下载busybox-armv7l
即可
- 通过
Custom command
执行chmod +x /bin/busybox
- 重新尝试登陆, 登陆成功