本来用得好好的树莓派(Arch Linux ARM),没啥事随手打了一条系统更新的命令:
pacman -Syu
结果重启之后无法用ssh以root用户登录树莓派了,提示错误如下:
Permission denied, please try again
这分明就像是密码错误导致的嘛!
一开始,我睁大了眼睛不敢相信,怀疑是密码输错了导致的,但是再三确认之后,情况可以确定了:密码是没错的,但是就是无法登录,试了多个terminal软件都一样,包括Chrome的Secure Shell插件、Ubuntu自带的ssh client,以及PAC。
于是我开始了漫长的问题排查过程。
文章来源:http://www.codelast.com/
『1』清除登录用户的登录密码
由于我在树莓派上安装好Arch Linux ARM之后,就一直在家里的内网中使用它,所以也没有特别在意过安全问题,只使用Arch Linux ARM默认的root用户来登录系统(密码是root),因此,我第一个方案想到的就是清除root用户的密码,使得root用户可以无密登录,进了系统以后就一切都好办了。
步骤如下:
把树莓派的TF卡拔下来,接上USB适配器插到一台Ubuntu台式机上,打开树莓派系统里的 /etc/shadow 文件(该文件保存了用户的登录密码),看到第一行内容类似于:
root:$6$4kB8D9Mu9$Laa9KKeD/vzCmyyQixAb.Hka...:16450::::::
为了安全,当今Linux系统并不是将密码直接保存在 /etc/passwd 文件中(因为该文件是非root用户也可以读取的),而是保存在 /etc/shadow 文件中,并且密码也不是明文的,而是加密过的——正如大家上面看到的例子一样。
/etc/shadow 文件的每一行一共有9个字段,每两个字段之间用分号(:)隔开,解释一下几个主要字段的含义:
* 第1个字段:用户名(例如root)
* 第2个字段:用户密码。这个字段最为复杂,里面又以 $ 符号为分隔符,分隔成了几个子字段:
6 密码加密方式,6表示密码是使用 SHA-512 算法加密的,这一点从 /etc/login.defs 文件中定义的下面这一行也可以证实:
ENCRYPT_METHOD SHA512
还有其他很多加密方式,大家可以用 man 3 crypt 命令查看一个列表,这里摘抄关键内容如下:
ID | Method ──────────────────────────────── 1 | MD5 2a | Blowfish (not in mainline glibc; added in some Linux distributions) 5 | SHA-256 (since glibc 2.7) 6 | SHA-512 (since glibc 2.7)
总之,使用 SHA-512 是相对来说最安全的,不要试图改变它。
4kB8D9Mu9:一个在生成密码的时候,随机生成的salt字符串,用于增大彩虹表攻击(破解用户密码)的难度。
Laa9KKeD/vzCmyyQixAb.Hka...:加密后的密码。这个字符串很长,所以我这里没有写完,最后用省略号省略了一部分内容。
文章来源:http://www.codelast.com/
从第3个字段起,不是我需要关注的内容,所以这里就不解释了。
要删除root用户的密码,只需要把第1个和第2个冒号之间的那一段内容全部删掉就可以了,变成这样:
root::16450::::::
于是赶紧把TF卡插回树莓派上,启动树莓派,再用root用户登录,依然提示要输密码!直接回车,没用!依然提示 Permission denied。
所以这条路是走不通了。
文章来源:http://www.codelast.com/
『2』修改root用户的登录密码,而不是删除它
删除root用户的登录密码没用,那我改一个总行了吧?
于是还是找到莓派TF卡上的 /etc/shadow 文件,这回还是折腾root用户的密码字段,只不过,这一次,我们需要知道如何修改它的密码。
怎样才能生成一个 /etc/shadow 文件认可的密码字段字符串呢?
答案是使用 mkpasswd 工具。
sudo apt-get install whois
mkpasswd -m sha-512
这回我信了,真的不是删密码、改密码可以解决的,一定是有其他什么问题。
文章来源:http://www.codelast.com/
『3』OpenSSH更新引起的惨案
我乖乖地跑到Arch的坛子上问了大侠们,很快就有人给出了正确的解答:是OpenSSH更新引起的:默认情况下,不再允许root用户以密码方式ssh登录!
* The default for the sshd_config(5) PermitRootLogin option has changed from "yes" to "prohibit-password".
#PermitRootLogin yes
然后再启动树莓派,root可以登录了,一切正常!
文章来源:http://www.codelast.com/
『4』总结
其实用root登录是很不好的习惯,我这次就掉坑里了。不说了,我这就建一个新用户去...
文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤
转载需注明出处:codelast.com
感谢关注我的微信公众号(微信扫一扫):
插到其他机子上怎么编辑/etc/ssh/sshd_config 啊...内存卡里没这个目录文件
我的树莓派3B在升级到了最新的系统之后还是有这个文件的。我估计你需要用sudo ls来查看SD卡上的文件列表。