引言:密钥登录为何“失灵”

不少使用 FinalShell 的用户在配置 SSH 密钥登录时,会遇到一个奇怪的现象:明明已经在服务器上放置了公钥,本地也生成了私钥,但连接时 FinalShell 依然弹出密码输入框,甚至直接提示“密码错误”。这种问题并非个例,通常与密钥文件权限、SSH 服务端配置或客户端设置有关。本文将从常见原因入手,给出逐步排查的方法,帮助你在不借助外部工具的情况下,让密钥登录真正生效。

原因一:公钥未正确追加到 authorized_keys

最常见的错误是将公钥内容直接覆盖写入 ~/.ssh/authorized_keys,而不是追加。如果该文件原本已有其他公钥,覆盖后会导致原有密钥失效,而新密钥也可能因格式问题无法识别。正确做法是:

  • 使用 ssh-copy-id 命令(如果服务器支持)自动追加;
  • 手动执行 echo “公钥内容” >> ~/.ssh/authorized_keys,注意使用双尖括号追加,而非单尖括号覆盖;
  • 检查文件内容是否完整,通常以 ssh-rsaecdsa-sha2-nistp256 开头,结尾无多余空格或换行。

另外,确保 authorized_keys 文件位于对应用户的家目录下,且路径正确。如果你使用 root 登录,则路径为 /root/.ssh/authorized_keys。

原因二:文件权限过于宽松

SSH 服务对密钥相关文件的权限非常敏感。如果 .ssh 目录或 authorized_keys 文件权限过大(例如其他用户可写),sshd 会出于安全考虑拒绝使用密钥认证,转而要求密码。检查并修正权限:

  • 家目录权限:chmod 700 ~(或至少 755,但 700 更安全);
  • .ssh 目录权限:chmod 700 ~/.ssh
  • authorized_keys 权限:chmod 600 ~/.ssh/authorized_keys

在 FinalShell 中,如果你将私钥放在 Windows 或 macOS 本地,也需注意私钥文件权限。Windows 下一般无需特殊设置,但若使用 WSL 或 Git Bash,可能需执行 chmod 600 私钥文件

原因三:SSH 服务端配置未开启密钥认证

即使公钥和权限都正确,如果 sshd_config 中禁用了 PubkeyAuthentication,一切也是徒劳。登录服务器,编辑 /etc/ssh/sshd_config,确认以下两行未被注释且值正确:

PubkeyAuthentication yes
PasswordAuthentication no

注意:修改后需重启 SSH 服务(例如 systemctl restart sshdservice ssh restart)。另外,某些云服务器厂商可能默认在安全组中限制了密钥登录,但这种情况较少见,更多是配置问题。如果同时启用了 AuthorizedKeysFile 自定义路径,请确保该路径与你的公钥存放位置一致。

原因四:FinalShell 客户端设置或私钥格式问题

FinalShell 在创建连接时,需要在“认证”选项卡中选择“公钥”方式,并指定私钥文件。容易忽略的是:

  • 私钥格式必须为 OpenSSH 格式(以 BEGIN OPENSSH PRIVATE KEY 开头)。如果你用 PuTTYgen 生成的是 .ppk 格式,需先转换为 OpenSSH 格式;
  • 检查私钥是否被密码保护(Passphrase)。如果设置了私钥密码,连接时仍会提示输入该密码,而非服务器密码——这容易造成误解;
  • 在 FinalShell 的“高级”设置中,确认未勾选“每次连接时询问密码”或类似选项。

另外,如果你在服务器上使用了 SELinux,可能需要调整上下文,但普通用户很少遇到,暂不展开。

实用建议:快速定位问题

当以上步骤都检查后仍无法解决,可以尝试以下方法:

  1. 在服务器端查看 SSH 日志,例如 tail -f /var/log/auth.log(Debian/Ubuntu)或 journalctl -u sshd(CentOS/RHEL),观察连接时是否有“Authentication refused”或“bad permissions”等提示;
  2. 使用命令行直接连接测试:ssh -i 私钥文件 用户@服务器IP,如果命令行成功而 FinalShell 失败,则问题出在客户端配置;
  3. 临时将 PasswordAuthentication 设为 yes 并重启 sshd,确认密钥能通过后,再改回 no——注意保持测试环境安全;
  4. 如果服务器有多个用户,确认你登录的用户与公钥所属用户一致,不要用 A 用户的密钥登录 B 用户。

结语

FinalShell 密钥登录提示密码,通常不是单一原因,而是多个环节叠加。建议按“公钥追加 → 权限修正 → sshd 配置 → 客户端设置”的顺序依次排查,每一步都验证一次。多数情况下,问题出在权限或公钥文件格式上。保持耐心,逐步定位,密钥登录的安全性和便捷性就能真正发挥出来。希望本文能帮你节省时间,顺利解决问题。

FinalShell声明:FinalShell站所有内容,资源,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。