User 'root' has invalid shell, rejected

zsh: applet not found

背景

  • openwrt 无法登陆, 正确配置 ssh key 和 password, 均无法登陆, 一直提示重新输入密码.
  • openwrt 网页可以正常打开, 登陆
  • openwrt 使用 dropbear 代替 openssh-server 进行 ssh 管理

解决步骤

  1. 登陆网页, 打开系统日志
  2. 尝试 ssh 登陆
  3. ssh 登陆失败后刷新系统日志页面, 并检查最新日志
  4. 日志里面显示 User 'root' has invalid shell, rejected
  5. 系统 → 软件包 → 搜索安装 Custom command(这个限制挺多的, 不支持管道, 执行结果不显示, 一直 loading)
  6. 打开 F12, 添加执行 cat /etc/passwd, F12 里面最新的 cfg 开头的 XHR 请求即为命令执行的结果.
  7. /etc/passwd 里面 root 的 shell 是 /usr/bin/zsh (也可以自己再测试下文件是否存在)
  8. 系统 → 软件包 → 搜索安装 zsh
  9. 尝试 ssh 登陆, 如果成功即结束
  10. ssh 日志提示 zsh: applet not found, Error relocating /usr/bin/zsh: xxx: symbol not found
  11. /etc/passwd 的内容在外部编辑, 将 root shell 编写为 /bin/ash, 然后通过 Custom command 使用 wget -O 进行文件覆盖(最好提前备份)
  12. https://busybox.net/downloads/binaries/ 根据 CPU 版本下载对应版本 busybox, 然后通过 Custom command 使用 wget -O 进行文件覆盖 /bin/busybox (最好提前备份)

如 状态页面显示 CPU 架构为: ARMv7 Processor rev 0 (v7l), 则下载 busybox-armv7l 即可

  1. 通过 Custom command 执行 chmod +x /bin/busybox
  2. 重新尝试登陆, 登陆成功