Linux SSH 密钥登录教程:从 Windows、macOS 和 Linux 连接 Ubuntu

SSH 密钥登录适合日常管理 Linux 服务器:个人电脑保管私钥,服务器保存对应公钥,连接时完成身份验证。私钥不应该上传服务器,也不应该发给客服。本文以 Ubuntu 24.04 服务器和 OpenSSH 客户端为例;它是一套操作示例,不要求先更改 SSH 端口。

开始前:保留一条能登录的连接

准备服务器公网地址、当前 SSH 端口,以及一个能够登录并使用 sudo 的普通账号。以下使用 deploy203.0.113.10 和端口 22,必须替换为你的实际信息;示例地址不能用于真实连接。

如果现在只能用 root 登录,先创建自己的管理账号并验证 sudo 权限,再为该账号配置密钥。本教程不会直接禁用 root,也不要求锁定账号密码。操作期间保留原 SSH 窗口,并确认控制台或救援入口可用。关闭密码认证属于最后的可选步骤,不能提前执行。

第一步:在个人电脑生成密钥

先检查电脑是否已有专门用于这台服务器的密钥。不要为了跟随教程覆盖已有文件;遇到覆盖提示,应取消并换一个新文件名。

Windows 在 PowerShell 中执行:

ssh -V
New-Item -ItemType Directory -Force "$env:USERPROFILE/.ssh" | Out-Null
ssh-keygen -t ed25519 -f "$env:USERPROFILE/.ssh/tianli_demo_ed25519"
Get-Content "$env:USERPROFILE/.ssh/tianli_demo_ed25519.pub"

macOS 或 Linux 在本机终端执行:

ssh -V
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/tianli_demo_ed25519
cat ~/.ssh/tianli_demo_ed25519.pub

生成时为私钥设置口令,并妥善保管。文件名带 .pub 的是公钥;另一个是不应分享的私钥。私钥口令是本机解锁密钥的保护,不等于服务器账号密码。Windows 找不到 ssh 时,可按照微软的 OpenSSH 说明启用客户端;公司电脑则先确认设备管理政策。

第二步:把公钥追加给正确账号

切换到已经登录的服务器窗口,确认 whoami 输出的是目标普通账号,然后执行:

# Ubuntu 服务器,以目标普通账号执行
whoami
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
nano ~/.ssh/authorized_keys

在文件末尾新起一行,粘贴刚才的完整公钥。保留已有公钥,不要清空文件。每把密钥占一行,不能把私钥内容粘进去,也不要复制终端提示符。若账号由自动化系统管理,应使用该系统认可的配置入口,避免下次部署覆盖手工修改。

检查 .ssh 目录与 authorized_keys 的归属是否为目标账号。权限宽泛、文件属主错误或写到了 root 家目录,都会造成“明明复制了公钥却仍然登录失败”。Ubuntu OpenSSH 文档说明了公钥部署、权限和日志检查方法。

第三步:从新窗口验证,禁止偷偷退回密码

保留旧连接,在个人电脑新开窗口。Windows PowerShell 执行:

ssh -o ControlMaster=no -o ControlPath=none -o PreferredAuthentications=publickey -o PasswordAuthentication=no -o IdentitiesOnly=yes -i "$env:USERPROFILE/.ssh/tianli_demo_ed25519" -p 22 deploy@203.0.113.10

macOS 或 Linux 本机执行:

ssh -o ControlMaster=no -o ControlPath=none -o PreferredAuthentications=publickey -o PasswordAuthentication=no -o IdentitiesOnly=yes -i ~/.ssh/tianli_demo_ed25519 -p 22 deploy@203.0.113.10

首次连接要通过可信渠道核对服务器主机密钥指纹。看到“主机密钥已变化”时,应先确认是否重装或更换服务器,不能习惯性删除记录继续连接。

登录成功后执行 whoamisudo -v。前者确认身份,后者确认管理员操作能力;sudo 仍可能要求账号密码,这是正常的。只有新会话独立成功,才算密钥配置完成。

可选:验证成功后关闭密码认证

先备份 SSH 配置,并检查主配置、sshd_config.d 文件及 Match 条件。OpenSSH 多数配置项以首先读取的值为准,所以随手新建一个“99”文件,未必能覆盖前面的设置。根据实际读取顺序编辑对应配置:

PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no

上述键盘交互设置会影响通过该方式接入的多因素认证;已有此类认证时,不要直接套用。账号密码仍可能用于 sudo,不能因此删除或锁定它。OpenSSH 配置手册提供各认证项的含义。

在服务器检查语法和实际配置,成功后才重新加载:

sudo sshd -t
sudo sshd -T | grep -E 'pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication'
sudo systemctl reload ssh

存在 Match 规则时,需使用 sshd -T -C 按实际用户及连接条件检查。再次新开密钥连接验证,确认无误后再关闭旧窗口。若失败,利用保留会话恢复修改前的配置,校验后重新加载。

失败时先看哪里

连接超时优先检查地址、端口和防火墙;Permission denied (publickey) 优先检查账号、公钥和权限。服务器可查看 sudo journalctl -u ssh --since "10 minutes ago",分享日志前遮盖敏感信息。日后更换电脑,应先加入并验证新公钥,再撤销旧公钥;每人使用独立密钥,离职或设备丢失时才能单独撤销。

日常维护:留好密钥用途记录

为每把公钥写清设备和使用人,定期检查仍然需要哪些入口。多人协作时,共享一个私钥会让后续撤销失去粒度;为每位维护者分配账号和密钥更便于审计。私钥备份应加密保存,并与服务器口令分开管理。更换电脑、恢复系统或重装服务器后,都重新走一次独立连接验证,不把旧电脑曾经连通过当成当前配置的证明。

参考资料

继续阅读

返回天理云文章中心

分享到:
上一篇
游戏服务器为什么看单核性能、内存和网络?开服配置判断方法
下一篇
Ubuntu UFW 防火墙配置:先保住 SSH,再开放网站端口
服务中心
企微客服
企微客服
给您高效服务
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意