Azure Linux VM切换至SSH密钥认证后仍可密码登录求助
检查是否有其他配置文件覆盖
PasswordAuthentication设置
多数Linux发行版会通过Include指令加载额外配置文件(比如/etc/ssh/sshd_config.d/*.conf),这些文件可能重新开启了密码认证。执行以下命令遍历所有相关配置:grep -r "PasswordAuthentication" /etc/ssh/若发现其他文件中存在
PasswordAuthentication yes,需将其修改为no。确保sshd服务已重启生效
修改sshd_config后必须重启服务才能让新配置生效,不同发行版的重启命令如下:# Systemd系统(Ubuntu 16.04+/CentOS 7+) systemctl restart sshd # SysVinit系统(旧版CentOS/Ubuntu) service ssh restart重启后检查服务状态确认无报错:
systemctl status sshd清理残留的sshd进程
旧的sshd进程可能未被正确终止,仍以旧配置运行。执行以下命令查看所有sshd进程:ps aux | grep sshd若存在多个主进程(非用户登录生成的子进程),用
kill <PID>杀掉旧进程,确保新配置的sshd在运行。检查PAM配置的影响
若sshd_config中UsePAM yes,PAM配置可能绕过sshd的密码禁用规则。查看/etc/pam.d/sshd文件,若存在auth include password-auth这类行,可尝试临时将sshd_config中的UsePAM改为no(注意:此操作会影响依赖PAM的其他认证功能,需测试后确认),或注释掉PAM配置中的密码认证相关行。排查Azure扩展或自定义数据的自动配置
部分Azure管理扩展(如监控、自动化扩展)或VM的自定义数据可能自动重置sshd配置。进入Azure门户,查看VM的「扩展」和「自定义数据」设置,确认没有自动修改sshd_config的配置项。验证
sshd_config的拼写与格式
确保PasswordAuthentication no拼写完全正确(注意大小写),且未被#注释。用以下命令检查配置文件语法:sshd -t若存在语法错误,根据提示修复后再重启服务。
内容的提问来源于stack exchange,提问作者Gal Avichid

