跳到主要内容

Linux 禁止密码登录

小林
后端开发工程师, 专注Go开发、微服务和云原生

为了服务器的安全性, 限制服务器只能通过密钥登录而不能通过密码登录

chained.png

修改 SSH 配置文件

SSH 配置文件路径在 /etc/ssh/sshd_config

1. 禁止密码登录

找到 PasswordAuthentication 参数, 将其值改为 no

2. 禁止 root 用户登录

找到 PermitRootLogin 参数, 将其值改为 no

若需允许 root 用户通过密钥登录但禁止密码登录, 可修改 PermitRootLogin 参数为 prohibit-password

重启 SSH 服务

记得运行下面命令重启 SSH 服务

sudo service ssh restart

记一次 SSH 安全性错误

已按上面流程配置文件并重启 SSH 服务, 但是还是可以通过密码登录. 而且自认为已禁止密码登录所以设置了一个非常弱的密码, 导致服务器非常容易被攻破

排查问题

起初以为是 SSH 服务未重启, 尝试了各种方式, 但还是可以通过密码连接.

突然好像想到了什么, config.d 模式的配置目录通常比根配置文件有更高的优先级, 而 SSH 服务正好有个 sshd_config.d 目录, 查看一下该目录

ls /etc/ssh/sshd_config.d

果然有个 50-cloud-init.conf 文件, 查看该文件内容

sudo cat /etc/ssh/sshd_config.d/50-cloud-init.conf

好家伙, 果然有一段

PasswordAuthentication yes

重启 SSH 服务并尝试密码连接, 这次果然无法通过密码连接了

最后忍不住吐槽一下字节的火山引擎, 相较于阿里云安全性做得有点差, 居然给我留了个暗坑

总结

在修改 SSH 服务配置的时候一定要注意先清空 /etc/ssh/sshd_config.d 目录, 同时修改配置时建议在该目录下增加配置文件进行配置, 而不是直接修改 /etc/ssh/sshd_config 文件, 防止被更高优先级的配置覆盖而出错