permission denied报错需先看括号内后缀:(publickey)表示密钥认证失败,须检查客户端私钥存在性、600权限及服务端authorized_keys内容与权限;(password)表示密码登录被拒,应确认passwordauthentication是否启用及用户状态。

遇到 Permission denied 报错,不能一概而论——它背后可能是密钥认证失败,也可能是密码被拒,甚至根本没走到认证环节。关键要先看完整错误信息,再分层定位。下面按最常见、最高频的两类情况拆解,帮你快速对症下药。
看清楚报错后缀:publickey 还是 password?
SSH 的报错末尾括号里的内容,是诊断的第一把钥匙:
- Permission denied (publickey):服务器只接受公钥认证,但你的客户端没提供有效密钥,或服务端没认出它。此时输入密码无效,也不提示输密码。
-
Permission denied, please try again:服务器允许密码登录,但你输错了,或该用户被禁用密码认证(
PasswordAuthentication no)。 - Permission denied (publickey,gssapi-keyex,gssapi-with-mic):服务器支持多种方式,但你既没配好密钥,也没启用 GSSAPI,且密码登录被关了——相当于“门开着,但你没带卡也没带钥匙,还不让敲门问路”。
密钥认证失败:重点查三处
如果报错含 publickey,就聚焦密钥链是否完整:
一款AI工具,主要用于在主代理响应前,并行运行Kimi K2.5和GPT 5.3 Codex,注入双方观点以增强认知多样性,适合需要提升相关任务效率的用户。
-
客户端私钥是否存在且命名规范?SSH 默认只尝试加载
~/.ssh/id_rsa、id_ed25519、id_ecdsa等固定名称。如果你的密钥叫aws-key.pem或private_key,不加-i参数就不会自动用它。 -
私钥权限是否为 600?OpenSSH 对安全敏感,只要权限宽松(比如 644 或 755),就会静默跳过该密钥。执行
chmod 600 ~/.ssh/your_key再试。 -
公钥是否已正确写入服务端
~/.ssh/authorized_keys?不是上传文件,而是把公钥内容(一行,以ssh-rsa AAAA...开头)追加进去。检查服务端该文件权限是否为 600、~/.ssh目录是否为 700。
密码登录被拒:先确认服务端是否允许
如果想输密码却直接被拒,大概率是服务端关掉了密码认证:
- 用 VNC 或控制台登录服务器,检查
/etc/ssh/sshd_config中这两项:PasswordAuthentication yes(默认常为 yes,但云厂商镜像可能设为 no)PermitRootLogin prohibit-password或yes(若用 root 登录) - 改完配置必须执行
sudo sshd -t检查语法,再sudo systemctl restart sshd生效。 - 注意:部分系统启用了 SELinux,即使配置正确,也可能因策略拦截导致“输对密码也登不上”。可临时运行
sudo setenforce 0测试是否为 SELinux 导致。
别漏掉网络与访问控制层
有些“Permission denied”其实压根没到认证阶段:
- 本地
telnet your_ip 22或nc -zv your_ip 22测端口是否通。不通就查安全组、防火墙、运营商是否封 22 端口(换手机热点试试)。 - 确认你连的是正确 IP 和端口。有些云平台默认 SSH 端口不是 22,或绑定了弹性公网 IP 后需重启网卡才生效。
- 检查目标用户名是否存在:
getent passwd username,避免拼错用户名或用户已被删除。










