服务器密码登录访问失败,往往源于配置错误、权限异常或安全策略拦截,而非单纯密码输入错误。90%以上的此类问题可通过系统日志排查、权限校验与SSH服务配置复核快速定位并修复,以下从现象识别、根因分析、解决方案三方面展开,确保技术决策可执行、可验证、可复用。

现象识别:确认问题真实发生
先排除误判,避免无效排查:
-
确认非客户端输入错误:
- 检查键盘Caps Lock、输入法状态(中文输入会导致特殊字符错位);
- 尝试在本地终端输入
ssh user@ip -o LogLevel=VERBOSE,观察详细握手日志; - 使用
ssh-keygen -y -f ~/.ssh/id_rsa验证私钥有效性。
-
确认非网络连通问题:
telnet ip 22或nc -vz ip 22测试端口开放;- 若端口不通,检查云平台安全组、本地防火墙(
iptables -L -n)、服务器sshd服务状态(systemctl status sshd)。
-
明确错误类型:

- “Permission denied (publickey,password)” → 认证链断裂;
- “Connection closed by [preauth]” → 连接被提前终止,多因非法请求触发防护;
- “Authentication failed” → 密码错误或账号被禁用;
- “Connection reset by peer” → 服务端主动断开,常见于
MaxAuthTries超限。
根因分析:四大高频问题定位
(1)SSH服务端配置限制
PasswordAuthentication no:配置文件/etc/ssh/sshd_config中禁用密码登录;PermitRootLogin no:root账号被禁止登录;MaxAuthTries 3:连续3次失败后强制断开连接;LoginGraceTime 120:超时未完成认证即断开。
→ 解决方案:编辑/etc/ssh/sshd_config,确认上述参数为yes或合理值,执行systemctl reload sshd生效。
(2)账号状态异常
- 账号被锁定:Linux系统
/etc/shadow中密码字段为或; - 密码过期:
chage -l username查看过期策略; - PAM模块拦截:
/etc/pam.d/sshd中pam_tally2.so或pam_faillock.so记录失败次数。
→ 解决方案:- 解锁账号:
passwd -u username(解锁)或usermod -U username; - 重置密码:
passwd username(需root权限); - 清除失败记录:
pam_tally2 --user username --reset。
- 解锁账号:
(3)权限与路径配置错误
- 家目录权限过高:
/home/username权限非755或属主非用户; .ssh目录或authorized_keys权限错误:.ssh应为700,authorized_keys应为600;- SELinux强制拦截:
sestatus查看状态,ausearch -m avc -ts recent查拒绝日志。
→ 解决方案:chmod 755 /home/username chmod 700 /home/username/.ssh chmod 600 /home/username/.ssh/authorized_keys chown -R username:username /home/username/.ssh
(4)安全策略与防火墙拦截
- 云平台安全组未放行22端口(AWS/Aliyun常见);
firewalld或ufw规则拦截:firewall-cmd --list-all;fail2ban服务触发封禁:fail2ban-client status sshd查看IP封禁列表。
→ 解决方案:- 云平台控制台添加入站规则(TCP 22);
- 开放端口:
ufw allow 22/tcp; - 解封IP:
fail2ban-client set sshd unbanip 192.168.1.100。
专业解决方案:三步闭环排查法
-
日志驱动定位:
- 查看服务端日志:
journalctl -u sshd -f或/var/log/auth.log; - 关键词过滤:
grep "Failed password" /var/log/auth.log。
- 查看服务端日志:
-
配置校验三对照:
- 对照
sshd_config实际配置与预期; - 对照账号状态(
id username、passwd -S username); - 对照系统安全模块状态(SELinux/AppArmor)。
- 对照
-
最小权限测试:
- 新建测试账号:
useradd testuser && passwd testuser; - 临时开放密码登录:
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config; - 测试成功后,再逐步收紧策略,避免直接生产环境操作。
- 新建测试账号:
相关问答
Q:为什么密码正确仍提示“Authentication failed”?
A:常见于账号被锁定、密码过期或PAM模块记录失败次数超限,需通过passwd -S username查状态、pam_tally2 --user清记录,并检查/etc/pam.d/sshd中认证模块配置。

Q:云服务器无法密码登录,但本地虚拟机正常,如何排查?
A:优先检查云平台安全组(入站规则)、实例防火墙(如ufw)、以及sshd_config中ListenAddress是否绑定内网IP,90%的此类问题由安全组未放行22端口导致。
您是否遇到过服务器密码登录访问失败的情况?欢迎在评论区分享您的排查技巧或解决方案!
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/172772.html