HCRM博客

CentOS SSH登录密码问题排查,Permission denied 故障解析

CentOS密钥登录正常但密码登录提示Permission denied,排查sshd_config

刚把新服务器上架,密钥秒进,密码却死活敲不开门,提示一行冷冰冰的“Permission denied, please try again.”,再试三次直接断开。别急着砸键盘,九成问题藏在/etc/ssh/sshd_config,一条配置写错,密码验证就被悄悄关掉。下面把踩坑路线一次说清,跟着做,十分钟内让密码登录重新开门。

CentOS SSH登录密码问题排查,Permission denied 故障解析-图1

先确认现象:密钥能进、密码被拒

用终端连服务器,带私钥文件直接进系统,说明SSH服务活着、网络没拦、防火墙放行22端口。换台没私钥的机器,输入账号密码,同样端口同样IP,立刻弹Permission denied,说明sshd主动拒绝了密码验证。此时别去改PAM、别动shadow,先盯死sshd_config,它才是闸门。

第一步:留一条命,防改错锁死

开两个窗口,一个已经用密钥连上,保持不动;另一个用来改配置。万一改崩,第一个窗口还能救场。养成习惯,先cp /etc/ssh/sshdconfig /etc/ssh/sshdconfig.bak,回滚只需一条命令。

第二步:找关键的三行配置

vim /etc/ssh/sshd_config,/搜索下面三项:

CentOS SSH登录密码问题排查,Permission denied 故障解析-图2

PasswordAuthentication

ChallengeResponseAuthentication

UsePAM

系统默认安装完,CentOS minimal镜像为了安全,把PasswordAuthentication设成no,这就是密码敲到手指发麻也进不去的元凶。把这行改成:

PasswordAuthentication yes

如果前面带#号,把#一并删掉。改完:wq保存。

CentOS SSH登录密码问题排查,Permission denied 故障解析-图3

第三步:检查ChallengeResponseAuthentication

很多人以为开了PasswordAuthentication就万事大吉,却忽略另一道闸。ChallengeResponseAuthentication如果写成no,部分老版本sshd会把密码验证一并掐死。保险起见,改成:

ChallengeResponseAuthentication yes

保存退出。

第四步:UsePAM别乱动

UsePAM yes是CentOS的默认,它负责把密码拿去跟系统账户比对。有人抄网上“优化”脚本,顺手把UsePAM改成no,结果密钥还能走公钥通道,密码验证却失去PAM支撑,同样被拒。确认该行保持yes即可。

第五步:重启服务,拒绝systemctl restart sshd

生产环境重启sshd会踢掉所有在线会话,风险高。用reload更温柔:

systemctl reload sshd

配置有错,sshd会当场报错,提示哪一行语法不对;没错就静默重载,已连的会话不断,新连接立刻生效。

第六步:排除防火墙与SELinux

密码登录仍失败,先别回头改配置,确认防火墙没做IP层拦截:

firewall-cmd --list-all | grep 22

看到22/tcp放行即可。再看SELinux:

getenforce

Enforcing状态下,若改过ssh端口,需要semanage port -a -t sshportt -p tcp 新端口;如果仅改配置未改端口,SELinux不会拦密码。为防万一,可setenforce 0临时放通,测试通过后再改回Enforcing。

第七步:日志定位,拒绝盲猜

tail -f /var/log/secure,另开窗口尝试密码登录,实时看sshd甩什么错。常见提示:

“Failed password for root from xxx port xxx”——说明密码输错或账户被锁。

“User root not allowed because account is locked”——账户被passwd -l锁了,passwd -u root解锁即可。

如果日志里连Failed password都不吐,八成还是sshd_config没放行,回到第二步再检查拼写、空格、注释符。

第八步:root远程开关

PermitRootLogin也是坑位。CentOS默认写成prohibit-password,密钥能进,密码不让。想保留密钥安全又临时给root开密码,可改成:

PermitRootLogin yes

更安全的做法是另建普通账号,给wheel权限,root保持prohibit-password,需要root时sudo -i,减少爆破面。

第九步:账户本身被锁

passwd -S root查看状态,出现LK字样代表锁定。解锁:

passwd -u root

如果用了fail2ban、denyhosts,检查iptables -L -n是否把客户端IP扔进DROP链,临时测试可fail2ban-client stop关闭服务。

第十步:重启sshd仍不生效,看配置加载路径

极少数场景,管理员手工编译安装过openssh,配置文件不在/etc/ssh。用:

sshd -T | grep -i password

打印运行时的实际配置,若看到的PasswordAuthentication仍是no,说明sshd读的是另一个路径,找到对应文件再改。

完整流程回顾

1. 留密钥会话当后门

备份sshd_config

改PasswordAuthentication yes

改ChallengeResponseAuthentication yes

确认UsePAM yes

systemctl reload sshd

看日志、看防火墙、看SELinux

检查PermitRootLogin与账户锁

必要时sshd -T核对实际配置

按顺序走完,密码登录基本都能复活。做完把PasswordAuthentication改回no,只用密钥,安全又省心。

重点再提醒:改配置前先备份,留一条密钥会话不退出,reload而非restart,看日志而非盲猜,四步保命。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/41779.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~