SSH服务器拒绝密码时,最直接的解决办法是改用SSH密钥认证登录,或者通过云厂商的VNC/管理终端重置密码后重新配置。大多数情况下,服务器并非真的“记错了”密码,而是服务端配置限制了密码登录方式,下面按排查逻辑和实操顺序,拆解这个问题。
SSH服务器拒绝密码,怎么才能登录上去
先明确一个关键点:SSH登录认证的优先级是“密钥优先、密码其次”,当客户端尝试密码登录但被服务端拒绝时,服务端的日志通常会记录明确的拒绝原因,查看日志是第一步,也是判断问题方向最可靠的动作。
第一步:查看服务端认证日志
登录入口如果还能用(比如云厂商的网页VNC),就先用这个入口进入系统,然后执行:
sudo tail -n 50 /var/log/auth.log
Debian/Ubuntu系统用上面这个路径,CentOS/RHEL系统用:
sudo tail -n 50 /var/log/secure
日志中会出现类似下面几个关键词,快速定位问题方向:
Failed password for invalid user用户名不存在或拼写错误User root not allowed because not listed in AllowUsers账号被限制登录Permission denied (publickey,password)密码认证方式被关闭,或密码输入错误Connection reset by IP客户端IP被防火墙拦截
第二步:确认sshd服务端是否允许密码登录
大量情况下,拒绝密码是因为sshd配置文件里关闭了密码认证,检查配置文件:
sudo grep -E "PasswordAuthentication|PubkeyAuthentication|ChallengeResponseAuthentication" /etc/ssh/sshd_config
如果PasswordAuthentication的值是no,密码登录自然会被拒绝,此时需要临时开启密码认证,或者直接用密钥登录,开启方式:
sudo sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config sudo systemctl restart sshd
修改后不要立刻关闭当前连接,先另开一个终端测试新配置是否生效,确认能登录后再收尾,这个习惯能帮你避免把自己锁在服务器外面。
第三步:尝试SSH密钥认证登录
如果服务端明确只允许公钥认证,密码方式无法登录,那就需要生成密钥对并导入公钥,在你本机执行:
ssh-keygen -t rsa -b 4096 -C "你的备注"
生成后,用ssh-copy-id把公钥推到服务器上,或者手动追加到服务器的~/.ssh/authorized_keys文件里:
cat ~/.ssh/id_rsa.pub | ssh 用户名@服务器IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
导入成功后,用密钥方式直接登录:
ssh -i ~/.ssh/id_rsa 用户名@服务器IP
行业共识认为,SSH密钥登录的安全性远高于密码登录,因为它不受暴力破解和弱口令猜测的影响。
排查SSH登录被拒绝的常见场景
不同场景下,ssh登录被拒绝怎么解决的路径差异很大,从实际运维接触到的案例来看,下面几种情况占到了绝大多数。
密码正确却说密码错误
这种矛盾通常出在PAM模块或认证链上,检查PAM配置:
sudo grep -r "pam" /etc/pam.d/sshd
如果配置了pam_tally2或pam_faillock,多次输错密码会被锁定一段时间,查看锁定状态:
sudo faillock --user 用户名
如果有锁定记录,管理员可以通过VNC清理锁定计数,或者等锁定期结束。
简米云/酷番云等云服务器连不上
国内云服务器普遍使用默认的sshd_config,但也存在安全组策略限制端口访问的可能,排查思路:
- 登录云厂商控制台,检查安全组入方向是否放行了TCP 22端口
- 确认防火墙规则没有误封你当前的出口IP
- 云厂商一般提供“管理终端”或“VNC登录”,用它进入系统排查
重启ssh服务会断开连接吗
执行systemctl restart sshd只会重启SSH服务本身,不会影响已经建立的TCP连接,正在进行的会话不会断开,但需要注意,重启瞬间新连接无法建立,几秒后就恢复,如果担心重启失败导致再也连不上,可以先执行配置语法检查:
sudo sshd -t
语法没问题再重启,这是最稳妥的做法。
远程服务器SSH拒绝密码的完整解决流程
从根源上解决这个问题,推荐按下面顺序操作,每一步都有明确目的。
使用密码登录的临时补救措施
如果你确定密码没问题,只是服务端配置关闭了密码认证,临时开启后登录再关闭不迟,完整流程:
- 通过VNC或管理终端进入服务器
- 用
sudo vim /etc/ssh/sshd_config编辑配置 - 找到
PasswordAuthentication,改为yes - 保存后执行
sudo systemctl restart sshd,保留当前VNC窗口不关 - 用SSH客户端尝试密码登录,成功后按需求重新关闭密码认证或继续使用
彻底切换为密钥认证登录
如果这是你自己的服务器,建议直接切到公钥认证,不再依赖密码,密钥对生成后,把公钥内容追加到服务器用户的authorized_keys文件中,具体路径为/home/用户名/.ssh/authorized_keys。
注意目录和文件的权限要求:
~/.ssh目录权限应为700authorized_keys文件权限应为600- 如果权限不对,密钥认证会静默失败,日志中出现
Authentication refused: bad ownership or modes,此时用chmod修正即可
排查SSH连接速度过慢导致的假象
有些情况下,服务器其实是在等待响应,并没有拒绝密码,但用户端表现像是卡住了,如果你用香港服务器或海外节点,ssh连接慢怎么排查就成了关键,常见原因包括:
- DNS反向解析超时,在sshd_config中设置
UseDNS no - GSSAPI认证延迟,在sshd_config中设置
GSSAPIAuthentication no
这两项改动能大幅缩短SSH连接建立时间。
多种SSH认证方式的安全性与适用场景对比
| 认证方式 | 安全性 | 适用场景 | 是否推荐长期使用 |
|---|---|---|---|
| 密码认证 | 弱,易被暴力破解 | 临时登录、内网环境 | 不推荐 |
| 密钥认证(RSA 4096) | 强,私钥不传输 | 个人服务器、生产环境 | 推荐 |
| 密钥+口令短语 | 极强,双因素效果 | 高安全要求的服务器 | 强烈推荐 |
SSH免密登录和密码登录哪个更安全这个问题,业内专家指出:免密登录其实是指“免输密码的密钥认证”,它比密码登录更安全,因为私钥本身不通过网络传输,且长度远超普通密码,但如果私钥文件泄露且未设置口令短语,风险也很大,所以建议生成密钥时设置passphrase,配合ssh-agent使用,体验和安全性兼顾。
SSH登录失败后的高频问题解答
SSH拒绝密码后,反复输入正确密码仍然失败怎么办?
检查当前登录用户是否被AllowUsers或DenyUsers限制,同时验证sshd_config中的PermitRootLogin是否被设为prohibit-password(即禁止root密码登录),如果服务器禁用了root密码登录,需要先以普通用户登录,再通过su -切换为root,或者直接使用密钥登录root用户。
修改sshd_config后无法重启SSH服务,如何处理?
先执行sudo sshd -t检查配置语法,再看端口是否被其他进程占用,另一种情况是配置文件末尾缺少换行符导致的最后一行失效,如果SELinux开启且配置了非标准端口,还需要检查SELinux布尔值ssh_sysadm_login或端口标签是否放行。
为什么密钥文件权限正确,SSH仍然拒绝密钥认证?
多出现在~/.ssh/authorized_keys所在用户目录的上级目录权限过大,例如/home/用户名目录如果是其他人的可写权限,sshd会直接拒绝加载公钥,修正为chmod 755 /home/用户名即可。StrictModes yes默认开启,任何权限异常都会导致认证被拒,设置StrictModes no可以做临时验证,但不建议长期关闭。
解决SSH服务器拒绝密码问题的核心在于:先判断是配置限制还是账号限制,再决定走密码修复路径还是密钥认证路径,多数情况下,切换到密钥认证能一劳永逸地解决这类困扰。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/613718.html





