问题
我正在开发一款嵌入式设备,在开发代码时,拥有 ssh 连接真的很棒。该设备是便携式的,有时完全与电池断开连接,因此为了保持主板上的当前时间,我在启动时从远程服务器更新日期和时间。问题是,设备上的 sshd 服务器在运行date
命令后不接受连接形式,回复Permission denied, please try again.
消息。
这是怎么回事
- 我能启动设备,连接网络,启动 sshd 并使用 ssh
- 我不能启动设备,连接网络,更新时间,启动 sshd 并使用 ssh
- 我不能启动设备,连接网络,启动 sshd,更新时间并使用 ssh
- 我能启动设备,连接网络,更新时间,重启设备,再次连接网络,启动sshd并使用ssh
我的发现
深入研究一段时间后,我发现sshd
服务器记录了以下内容:
debug1: userauth-request for user root service ssh-connection method none
debug1: attempt 0 failures 0
Account root has expired
input_userauth_request: invalid user root
甚至在我被要求输入密码之前。如果时间没有更新,它就不存在。问题似乎是系统时间更改后,该/etc/shadow
文件会以某种方式锁定 root 用户。
我尝试过的方法
我尝试ssh
在电脑上以调试模式运行(我正尝试从电脑连接到嵌入式设备),我sshd
以调试模式运行,并尝试使用rdate
命令更新时间,我这样做了很多次,以至于我不可能输入错误的密码(因为当我对时间不做任何操作时,连接没有问题),我还尝试使用 ssh 密钥而不是密码进行连接。我尝试运行passwd -u root
命令,但它没有改变任何东西。
我正在使用
# busybox
BusyBox v1.18.3 (2016-03-20 23:15:14 CET) multi-call binary.
# /usr/sbin/sshd -v
sshd: illegal option -- v
OpenSSH_5.8p1, OpenSSL 1.0.0d 8 Feb 2011