SSH登录“Permission denied”需按顺序排查:服务状态与端口监听、网络及防火墙连通性、sshd_config关键配置、系统日志报错原因。

SSH 登录提示“Permission denied”不是单一问题,而是认证链上某处被拒的统一表现。关键不是猜“是不是密码错了”,而是快速定位拒绝发生在哪一环——是服务没跑?端口不通?配置关了密码?还是密钥权限不对?下面按实际排查顺序展开,每一步都对应真实高频场景。
先确认 SSH 服务在跑、端口在听
很多“连不上”其实根本没走到认证阶段。
- 登录服务器控制台(VNC 或物理终端),执行 systemctl status sshd(Ubuntu/Debian/CentOS 均适用),看状态是否为 active (running);若不是,运行 sudo systemctl start sshd
- 检查 22 端口是否真正在监听:ss -tlnp | grep :22。如果只显示 127.0.0.1:22,说明只允许本地连接,需检查 /etc/ssh/sshd_config 中 ListenAddress 是否被设成回环地址
- 若改过端口(比如用了 2222),客户端必须显式加 -p 2222,否则默认仍连 22
验证网络和防火墙是否放行
服务开着、端口听着,但中间被拦住,照样连不过去。
- 从客户端机器执行:nc -zv 服务器IP 22(或 telnet 服务器IP 22)。若提示 Connection refused 或 timeout,说明 TCP 层不通
- 检查服务器本地防火墙:sudo ufw status(Ubuntu)或 sudo firewall-cmd --list-ports(CentOS),确认 22/tcp 已放行;临时关闭测试可排除干扰
- 云服务器(阿里云、腾讯云等)务必检查安全组——这是最常被忽略的一环,入方向规则必须明确允许你的 IP 访问 22 端口
核对 sshd_config 关键配置项
配置写错,服务照常运行,但会静默拒绝合法请求。
- 打开 /etc/ssh/sshd_config,重点检查以下几行是否启用且值正确:
PasswordAuthentication yes(密码登录必需)
PermitRootLogin yes(如用 root 登录)
PubkeyAuthentication yes(密钥登录必需)
AllowUsers user1 user2(如有此行,确保当前用户名在列表中) - 改完必须重启:sudo systemctl restart sshd,否则配置不生效
- 注意:某些系统默认禁用 root 密码登录,即使密码正确也会被拒
查日志,看服务器到底为什么拒
日志才是真相所在,比猜快十倍。
- 实时跟踪登录日志:sudo tail -f /var/log/auth.log(Debian/Ubuntu)或 sudo tail -f /var/log/secure(CentOS/RHEL)
- 尝试一次登录,在日志里找关键词:
“Failed password for root” → 密码错或 PasswordAuthentication 被关
“User root not allowed because account is locked” → 用户被锁或 shell 设为 /sbin/nologin
“Could not get shadow information for root” → SELinux 干扰,临时执行 sudo setenforce 0 测试 - 密钥登录失败时,日志常提示 “Authentication refused: bad ownership or modes”,立刻检查 ~/.ssh 目录权限(700)和 authorized_keys 文件权限(600)











