"Permission denied (publickey)" 是什么意思
这个报错的意思是服务器拒绝了你的认证——网络连接是通的,但服务器不接受你客户端递上来的任何凭证。括号里写 (publickey),说明服务器只允许密钥认证、而你的密钥一把都没匹配上。它几乎总是五个原因之一:用户名错、客户端没递对密钥、公钥不在服务器上、~/.ssh 权限不对、或服务器配置不允许你的认证方式。下面教你几分钟定位是哪一个。
五个原因,按可能性排序
| # | 原因 | 快速检查 |
|---|---|---|
| 1 | 用户名错了 | 是 ubuntu、root、pi 还是 ec2-user?云镜像各不相同 |
| 2 | 客户端没递对密钥 | 连接设置里真的选了密钥吗? |
| 3 | 公钥不在 authorized_keys 里 | 这台服务器上装过这把公钥吗? |
| 4 | 服务器上权限太开放 | ~/.ssh 必须 700,authorized_keys 必须 600 |
| 5 | 服务器配置不允许 | PasswordAuthentication no + 没装密钥 |
1——先查用户名
最常见的原因,尤其在云服务器上:每种镜像有自己的默认用户——ubuntu(Ubuntu)、ec2-user(Amazon Linux)、root(很多 VPS 镜像)、pi(老版树莓派系统)、debian、admin……用户名错了,服务器在看你的密钥之前就拒绝了,报错长得一模一样。
2——确认递的是对的密钥
桌面上,ssh -v user@host 会显示客户端尝试了哪些密钥("Offering public key…")。移动客户端里,打开连接设置确认这条连接真的挂了密钥——一条"用密码"建的连接根本不会递密钥。在 TermAI 里,编辑连接、把认证切到你的密钥。
3——把公钥装到服务器上
服务器只接受列在你登录的那个用户的 ~/.ssh/authorized_keys 里的密钥。如果你还有别的方式能进去(密码、控制台):
# 从一台能登录的机器:
ssh-copy-id user@host
# 或手动追加你的公钥:
cat your_key.pub >> ~/.ssh/authorized_keys 在手机上,TermAI 能替你做:它生成 Ed25519 密钥,并有一键部署到服务器,通过现有的可用登录把公钥写进 authorized_keys。注意:密钥装在特定用户的家目录下——给 root 装了,不等于能用 ubuntu 登录。
4——修服务器上的权限
文件或目录权限太开放时,OpenSSH 会默默忽略 authorized_keys。在服务器上:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh 也检查家目录本身没有组/全员可写。这就是经典的"密钥装了还是失败"的原因——看服务器的 /var/log/auth.log,它会记"Authentication refused: bad ownership or modes"。
5——看服务器允许什么
在 /etc/ssh/sshd_config 里:如果 PasswordAuthentication no 而你的密钥没装,你就被锁在失败的路上;如果 PermitRootLogin no 而你在试 root,那就是拒绝的来源。改配置(或用对的用户),然后 sudo systemctl restart ssh。见安全地禁用 root 登录。
在手机上排查
这个错在手机上撞见时,痛苦的是读冗长的报错、记诊断命令。只要你对这台机器还有任何能用的会话,选中报错输出问助手——TermAI 的 AI 读真实的报错和服务器上下文,告诉你是五个原因里的哪一个,并给出可复核再运行的确切修复命令。
常见问题
Permission denied (publickey) 是什么意思?
服务器只接受 SSH 密钥认证,而你客户端递的密钥都没匹配。按顺序查:用户名、密钥选择、authorized_keys、权限。
为什么我装了密钥还是失败?
通常是权限:~/.ssh 必须 700、authorized_keys 必须 600,且归登录用户所有。或者密钥装在了另一个用户名下。
怎么看到底是什么在失败?
桌面上跑 ssh -v user@host;服务器上看 /var/log/auth.log(或 journalctl -u ssh)——它会明确写出原因。
能从手机上修吗?
能,只要你还有任何能进去的方式(密码登录或另一把密钥)。TermAI 能一键把新密钥部署到服务器,它的 AI 也能诊断 auth.log 输出。
快速事实
- 含义:服务器拒绝认证——没有递上的密钥匹配(是认证问题,不是网络)
- 主因:用户名错 · 没递密钥 · 不在
authorized_keys· 权限不对 · 服务器配置 - 权限:
~/.ssh700,authorized_keys600 - 看真实原因:客户端
ssh -v,服务器端/var/log/auth.log
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.