核心原因总结
问题出在 “你提供的密码” 和 “服务器上存储的正确密码” 不匹配,但导致不匹配的原因有很多,下面我们详细分析。

排查步骤(从最常见到最不常见)
请按照以下顺序逐一检查,这能帮你高效地解决问题。
第1步:检查基本输入错误(最常见)
这是最首要、最简单的检查,也是最容易忽略的。
- 大小写敏感:Linux/Unix 系统的密码是严格区分大小写的。
Password123和password123是两个完全不同的密码,请确保你的 Caps Lock 键没有开启,并且输入的字母大小写完全正确。 - 隐藏字符:在输入密码时,为了安全,终端通常不会显示任何字符(光标不动),这容易让人误以为没输入进去,请务必完整输入你的密码,然后按回车。
- 多输入或少输入:仔细检查密码前后是否有多余的空格,或者是否漏掉了某个字符。
第2步:确认服务器端密码
有时候问题不在你,而在服务器。
- 密码是否已更改:你是否在别的地方(比如通过控制台面板)修改了服务器密码?如果是,请确保你使用的是新的密码。
- 账户是否被锁定:如果多次输错密码,有些服务器安全策略(如
fail2ban)可能会暂时锁定你的 IP 地址或账户,你需要等待一段时间(如5-10分钟)再试,或者联系服务器管理员解锁。 - 账户是否过期:有些公司或组织的系统会定期要求用户更改密码,旧密码会失效,确认你的账户密码是否仍在有效期内。
第3步:检查 SSH 服务端的配置(非常重要)
服务器被配置为不接受密码登录,这是一种提高安全性的做法。

-
检查是否禁用密码登录: 你需要登录到服务器上(比如通过控制台 VNC),然后检查 SSH 的主配置文件
/etc/ssh/sshd_config。sudo nano /etc/ssh/sshd_config
找到下面这一行:
#PasswordAuthentication yes-
如果这一行被注释了(有 号),或者设置为
no,那就意味着服务器拒绝了所有密码登录。 -
解决方案:将其修改为
yes,然后保存文件,并重启 SSH 服务。
(图片来源网络,侵删)# 修改文件 sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config # 或者 sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config # 重启SSH服务使配置生效 (根据系统不同选择一个) sudo systemctl restart sshd # CentOS/RHEL/Fedora sudo systemctl restart ssh # Debian/Ubuntu
-
-
检查是否允许你的用户登录: 同样在
sshd_config文件中,检查AllowUsers或DenyUsers指令。AllowUsers user1 user2如果你的用户名不在这个列表里,或者被
DenyUsers指令禁止了,你也将无法登录,你需要联系管理员将你的用户名添加到允许列表中。
第4步:检查客户端端的配置
问题也可能出在你的电脑上。
-
检查 SSH 客户端配置文件: 在你的用户主目录下,检查是否存在
~/.ssh/config文件,这个文件可以为特定的服务器设置特殊的登录选项。 如果你为这个服务器设置了PubkeyAuthentication yes和PasswordAuthentication no,那么即使服务器本身允许密码登录,你的客户端也会尝试用密钥登录,失败后就不会再尝试密码了。 解决方案:检查并修改或删除这个文件中针对该服务器的错误配置。 -
尝试使用
-v参数获取详细日志: 在你的终端里,使用-v(verbose) 参数再次尝试连接,这会打印出详细的连接过程,帮助你定位问题在哪一步。ssh -v your_username@your_server_ip
仔细查看输出,找到
auth(认证) 相关的信息,它会明确告诉你是在哪个环节失败的,Permission denied (publickey,password).-> 这表示服务器同时拒绝了密钥和密码登录(通常是第3步的问题)。Permission denied (publickey).-> 这表示服务器只接受密钥登录,拒绝了密码(通常是第3步中PasswordAuthentication no导致的)。Permission denied (password).-> 这明确表示密码错误(通常是第1、2步的问题)。
第5步:网络和防火墙问题
虽然不常见,但有时网络也会捣乱。
- 防火墙:确保服务器的防火墙(如
ufw,firewalld或云服务商的安全组)允许来自你 IP 地址的 SSH 连接(默认是 22 端口)。 - SSH 端口:确认你连接的端口号是否正确,默认是 22,但很多服务器会修改成其他端口(如 2222),检查你的连接命令
ssh -p 2222 user@ip中的-p参数。
解决方案总结
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 最常见 | 密码输错(大小写、空格、字符) | 仔细核对,重新输入。 |
| 服务器配置 | PasswordAuthentication 被设为 no |
登录服务器,修改 /etc/ssh/sshd_config 文件,重启 SSH 服务。 |
| 账户问题 | 密码被改/过期/账户被锁 | 确认最新密码,或联系管理员解锁/重置密码。 |
| 客户端问题 | SSH 客户端配置文件 指定了错误认证方式 | 检查并修改 ~/.ssh/config 文件。 |
| 网络问题 | 防火墙拦截 或 SSH 端口错误 | 检查服务器防火墙规则,确认连接端口号。 |
| 排查工具 | 无法确定具体问题 | 使用 ssh -v user@ip 命令获取详细日志,分析失败原因。 |
建议操作流程:
- 先用
ssh -v命令连接,看日志输出。 - 如果日志显示
Permission denied (password),100% 是密码问题,回到第1、2步。 - 如果日志显示
Permission denied (publickey,password),99% 是服务器禁用了密码登录,直接去第3步检查服务器配置。
希望这些步骤能帮助你成功解决问题!
