建议在 /etc/ssh/sshd_config.d/ 创建一个 conf 文件来自定义 sshd 配置,而不是直接编辑 /etc/ssh/sshd_config,防止 OpenSSH 更新后配置冲突。
参考: ssh - PasswordAuthentication no, but I can still login by password - Unix & Linux Stack Exchange
有些云服务商为了启用远程密码登录(sshd 默认禁用 ),会在 /etc/ssh/sshd_config.d/ 自定义一个 conf 文件,修改 sshd 配置前先要排除它们的干扰。
# 查看 sshd_config.d 是否存在其他 conf 文件
sudo ls /etc/ssh/sshd_config.d/*.conf
# 如果存在,重命名,防止后续自定义配置被覆盖
sudo mv /etc/ssh/sshd_config.d/xxx.conf /etc/ssh/sshd_config.d/xxx.conf.bak
比如 CloudCone 就有一个 /etc/ssh/sshd_config.d/50-cloud-init.conf
sshd 配置修改完,先用 sudo sshd -T 看一下有效配置,免得被覆盖了都不知道
。
# Root 用户登录方式
sudo sshd -T | grep -i "PermitRootLogin"
# 密码认证
sudo sshd -T | grep -i "PasswordAuthentication"
# ssh 端口
sudo sshd -T | grep -i "Port"
值得一提的是,prohibit-password 是 without-password 的别名,所以看到下面的输出是正常现象。

参考:

