为什么 SSH 还在要密码
你配了密钥,但 SSH 一直要密码——意味着服务器没接受你的密钥、退回到了密码认证。原因几乎总是六个之一:公钥不在 authorized_keys、文件或目录权限太开放、用错了用户名、客户端没递这把密钥、sshd 关了密钥认证、或 SELinux 标错了文件上下文。下面教你按"最快先查"找出是哪个。
六个原因
| # | 原因 | 检查 |
|---|---|---|
| 1 | 密钥不在 authorized_keys | 真的复制到这个用户了吗? |
| 2 | 权限太开放(最常见) | ~/.ssh 700、authorized_keys 600、家目录非组可写 |
| 3 | 用户名错 | 密钥按用户分——装在你登录的那个用户下了吗? |
| 4 | 客户端没递密钥 | ssh -v 显示 "Offering public key…" 吗? |
| 5 | sshd 不允许密钥认证 | sshd_config 里 PubkeyAuthentication yes? |
| 6 | SELinux 上下文错 | RHEL/Fedora:restorecon -R ~/.ssh |
让服务器告诉你
最快的诊断是连接时看服务器的认证日志。从一个能用的会话(或控制台):
sudo tail -f /var/log/auth.log # Debian/Ubuntu
sudo journalctl -u ssh -f # systemd 它会明说原因——Authentication refused: bad ownership or modes for file …(就是原因 #2),或 user not allowed 等。客户端侧,ssh -v user@host 显示你的密钥到底有没有被递出(原因 #4)。
头号修法:权限
authorized_keys 太可读时 OpenSSH 会默默忽略。在服务器上,对登录用户:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh 也确认你的家目录不是组/全员可写(chmod g-w,o-w ~)。"密钥装了还要密码"的大多数情况都是这个原因。客户端侧对应的镜像问题——你的私钥太开放——是 UNPROTECTED PRIVATE KEY FILE。
其它修法
- 密钥没装 / 用户错——用 ssh-copy-id 重新复制到对的账号。给
root装了不等于能用ubuntu登录。 - 客户端没递——指向对的密钥:
ssh -i ~/.ssh/mykey user@host,或见 指定密钥。 - sshd 关了——在
/etc/ssh/sshd_config设PubkeyAuthentication yes,然后sudo systemctl restart ssh。
在手机上
这事在移动端的痛点是读冗长日志、把它和原因对上。只要你对那台机器还有任何能用的会话,选中 auth.log 那行问助手——TermAI 的 AI 读它,告诉你是权限问题还是缺密钥还是配置问题,并给确切命令。而且因为 TermAI 把密钥存在设备 Keychain 并替你部署,客户端侧的原因(递错密钥、私钥权限不对)压根不会发生。
常见问题
加了密钥后 SSH 为什么还要密码?
服务器没接受密钥、退回密码。多半是 ~/.ssh(700)或 authorized_keys(600)权限太开放、密钥在错的用户下、或根本没加。查 /var/log/auth.log。
怎么确认密钥被递出了?
跑 ssh -v user@host——找 "Offering public key"。没有的话用 -i 指向密钥。
它说 "bad ownership or modes" 怎么办?
那是权限原因:chmod 700 ~/.ssh、chmod 600 ~/.ssh/authorized_keys,并确认家目录非组可写。
会不会是服务器关了密钥认证?
会——查 /etc/ssh/sshd_config 的 PubkeyAuthentication yes 并重启 sshd。
快速事实
- 含义:服务器拒了你的密钥、退回密码
- 头号原因:权限——
~/.ssh700、authorized_keys600、家目录非组可写 - 诊断:服务器
/var/log/auth.log,客户端ssh -v - 还有:用户错、没递密钥、
PubkeyAuthentication no、SELinux 上下文
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.