Linux SSH 密钥登录配置与常见故障排查

举报
GGBondHere 发表于 2026/10/22 12:35:17 2026/10/22
【摘要】 介绍 Ubuntu、Debian 云服务器的 SSH 密钥认证配置方法,包括 Ed25519 密钥生成、公钥上传、文件权限检查、SSH 连接日志分析及安全注意事项,帮助排查密钥登录失败的问题。

前言

平时管理 Linux 云服务器,SSH 基本是每天都会用到的工具。相比每次输入服务器账号密码,使用 SSH 密钥认证可以减少重复操作,也便于管理多台服务器。

不过第一次配置时,经常会碰到公钥明明已经上传,连接时却仍要求输入密码的问题。下面以 Ubuntu、Debian 为例,介绍密钥登录的基本流程以及常见排查方法。

一、SSH 密钥认证的原理

SSH 密钥认证使用一对密钥:

  • 私钥:保存在客户端,不应该上传到服务器或公开分享。
  • 公钥:放在服务器对应用户的 authorized_keys 文件中。

连接时,客户端通过私钥证明自己的身份,服务器使用已授权的公钥验证。

需要注意,密钥登录不代表私钥一定没有密码。如果生成密钥时设置了口令(passphrase),使用私钥时仍可能需要输入口令,但不再依赖服务器账户密码完成认证。

二、在本地生成密钥

在本地 Linux 终端或 Windows PowerShell 中执行:

ssh-keygen -t ed25519 -C "cloud-server"

按照提示选择保存路径,并根据需要设置私钥口令。

默认情况下会生成两个文件:

~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub

其中不带 .pub 的是私钥,带 .pub 的是公钥。

Ed25519 是目前 OpenSSH 常用的密钥类型之一,密钥较短,适合日常服务器登录。

三、把公钥添加到服务器

如果本地使用 Linux 或 WSL,并且安装了 ssh-copy-id,可以执行:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server-ip

把 user 替换成服务器登录用户名,server-ip 替换成服务器地址。

这条命令会把本地公钥添加到目标用户的授权密钥文件中。执行时通常需要先使用服务器当前允许的认证方式完成登录。

如果没有 ssh-copy-id,也可以手动把公钥内容追加到服务器对应用户的:

~/.ssh/authorized_keys

每个公钥一般占一行,不要把私钥内容放进去。

如果 SSH 使用了自定义端口,ssh-copy-id 可以通过 -p 指定端口。

四、检查文件权限

如果公钥已经添加,但服务器仍然拒绝密钥认证,可以先检查文件权限。

使用目标账号登录服务器后执行:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

同时确认 .ssh 目录和 authorized_keys 属于正确的用户。

OpenSSH 默认会检查相关文件和目录的安全性。如果授权密钥文件或上级目录可以被其他用户随意修改,服务器可能拒绝使用该文件进行认证。

另外,也要确认公钥放在了正确账号的家目录下。例如使用 ubuntu 登录,就需要检查 ubuntu 用户的授权密钥文件,而不是其他账号的文件。

五、测试 SSH 密钥登录

在本地执行:

ssh -i ~/.ssh/id_ed25519 user@server-ip

如果服务器使用非默认端口,可以指定:

ssh -p 2222 -i ~/.ssh/id_ed25519 user@server-ip

这里的 2222 只是示例端口,需要替换成实际配置。

如果连接失败,可以添加详细日志参数:

ssh -vvv -i ~/.ssh/id_ed25519 user@server-ip

重点查看客户端是否尝试使用了指定密钥,以及服务器是否接受该公钥。

六、检查服务端配置和日志

如果确认公钥文件没有问题,可以继续查看 SSH 服务端配置。

在 Ubuntu、Debian 中,常见配置文件是:

/etc/ssh/sshd_config

部分系统还会读取:

/etc/ssh/sshd_config.d/

重点关注两个配置项:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

这里展示的是常见配置方式,实际生效值可能受到其他配置文件及 Match 规则影响。

修改 SSH 服务端配置后,建议先进行语法检查:

sudo sshd -t

确认无误后,再根据需要重新加载或重启 SSH 服务。

还可以查看最近的认证日志:

sudo journalctl -u ssh -n 50 --no-pager

如果系统使用的服务单元名称不同,应替换成实际的 SSH 服务名。

七、不要急着关闭密码登录

配置密钥认证后,有些教程会建议直接把 PasswordAuthentication 设置为 no。

这样做可以减少服务器密码登录的攻击面,但前提是密钥登录已经正常工作。

比较稳妥的做法是:

  1. 保持现有 SSH 会话不关闭。
  2. 新开一个终端,确认密钥登录成功。
  3. 检查其他需要登录的账号和自动化任务。
  4. 确认有云控制台等应急访问途径后,再考虑关闭密码认证。

如果还没验证密钥能正常登录就关闭密码认证,可能会把自己锁在服务器外。

总结

SSH 密钥认证配置并不复杂,关键是确认三件事:

  1. 客户端使用了正确的私钥。
  2. 公钥已经添加到服务器目标用户的 authorized_keys。
  3. 服务端允许公钥认证,且文件权限正确。

遇到连接问题时,先看 ssh -vvv 的客户端日志,再结合服务器的 journalctl 日志定位原因,比反复重新生成密钥更有效。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。