叶锐垚的博客

  • 网络与编程
  • 游戏测评
  • 游戏攻略
  • 杂记
叶锐垚的博客
Playing & Sharing
  1. 首页
  2. 网络与编程
  3. 正文

2025 MacOS SSH 密钥全指南:从生成到故障修复

2025 年 2 月 21 日 325点热度 0人点赞 0条评论

今天我突然发现服务器自带的密钥无法登陆,并且从服务器提供商 DMIT 的官网上也无法重新下载密钥。好在 DMIT 的帮助文档中有本地生成 SSH 密钥并上传至服务器的教程,在本文中我就以 MacOS 为例详细说明如何清除旧的 SSH 登陆记录,并使用自己生成的 SSH 密钥登陆服务器后台。因为操作基本在命令行中进行,使用 Windows 或 Linux 系统的操作也应该是一样的。

本文是对关于建站的文章「零基础『快速』搭建个人博客?不存在的...…」的补充。如果你没有使用 SSH 密钥登陆服务器的需求,就不用看下面的内容了。

目录

  • 生成 SSH 密钥
  • 上传 SSH 公钥至服务器
  • 清除本地的旧密钥信息

生成 SSH 密钥

SSH 密钥由公钥和私钥两部分组成。公钥就好比挂在门口的锁,不具有保密性,每个路过大门的人都能看到。而私钥就像是钥匙,是开门的唯一方式。当公钥绑定服务器之后,必须使用私钥才能访问它。当然这需要服务器支持 SSH 密钥登陆才可以。

生成密钥的操作需要在命令行工具中进行,比如 MacOS 和 Linux 系统里的终端,和 Windows 系统的 PowerShell。接下来我以 MacOS 为例进行说明。

在终端中输入 ssh-keygen 指令即可开始生成 SSH 密钥:

ssh-keygen -t rsa

这里的 rsa 是我选择的加密算法。用 rsa 就可以。这个指令还有一些其他的配置项,可以更改密钥长度,增加注释等,但这些都不是必要的。如果你想了解的话可以参考这篇文章:传送门。

指令运行后,终端中会出现如下提示:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/yourname/.ssh/id_rsa): 

第一行提示的意思是要开始生成使用 rsa 加密的公钥和私钥了。第二行是让你输入密钥的存储位置。括号里的是默认的存储位置,如果不想改就直接按回车进入下一步输入二级密码:

Enter passphrase (empty for no passphrase): 

直接回车跳过就是不设置二级密码,只用私钥就能登陆服务器;在这里输入密码并回车就能设置二级密码,这样只使用私钥是无法登陆服务器的,还需要再输入这个二级密码才可以。如何设置取决于你自己的工作环境,如果觉得私钥被盗取的风险比较高,就可以设置二级密码。接下来屏幕上会出现:

Enter same passphrase again: 

重新输入刚才的密码并回车就可以。如果上一步没设置密码就直接回车跳过。这样 SSH 密钥就生成完成,屏幕中会出现提示:

Your identification has been saved in /Users/yourname/.ssh/id_rsa
Your public key has been saved in /Users/yourname/.ssh/id_rsa.pub
The key fingerprint is:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
The key's randomart image is:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

接下来打开访达,进入 /Users/yourname/.ssh/ 就能看到公钥文件 id_rsa.pub 和私钥文件 id_rsa。如果你看不到 .ssh 文件夹,是因为这是个隐藏文件夹。按快捷键 ⌘ + Shift + . 就能显示出来了。

上传 SSH 公钥至服务器

先打开公钥文件 id_rsa.pub,复制里面的内容。再进入服务器运营商的网站,找到新增 SSH Key 的地方,把公钥粘贴到这里并添加。


添加之后还需要和服务器绑定,往往还需要重启一次服务器才能生效。因为每个服务器提供商的界面都不一样,按照系统提示操作就可以。

清除本地的旧密钥信息

由于我先前使用的是服务器自带的 SSH 密钥,直接用新的私钥登陆服务器会出现如下报错:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the xxxxxxxx key sent by the remote host is
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Please contact your system administrator.
Add correct host key in /Users/yourname/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/yourname/.ssh/known_hosts:3
Host key for 11.11.111.11 has changed and you have requested strict checking.
Host key verification failed.

这里可以看出问题所在,也就是 known_hosts 这个本地文件中保存了服务器主机的旧公钥信息,我们用新的私钥自然是打不开这把旧锁的。所以就需要先清除老的公钥信息:

ssh-keygen -R 11.11.111.11

指令还是 ssh-keygen ,但是参数项使用的是 -R,功能即把指定的服务器公钥消息移出 known_hosts 文件。后面的 11.11.111.11 就是目标服务器的 IP 地址。之后终端中显示如下信息就说明成功了:

# Host 11.11.111.11 found: line 1
# Host 11.11.111.11 found: line 2
# Host 11.11.111.11 found: line 3
/Users/yourname/.ssh/known_hosts updated.
Original contents retained as /Users/yourname/.ssh/known_hosts.old

接下来我们就可以使用新的私钥登陆服务器了。输入:

ssh -i //Users/yourname/.ssh/id_rsa root@11.11.111.11

其中 //Users/yourname/.ssh/id_rsa 用于选择私钥保存的路径和私钥文件。如果你觉得默认的位置不方便,可以把私钥剪切到其他文件,这里的路径也要做相应的修改。

然后就会出现成功登陆服务器的提示。不同的服务器提供商的界面会有所不同,但通常会出现 Welcome to xxxx,或者 Last login: Date Time xxxx 等字样。如果有遇到疑难杂症,可以在评论区留言。

叶 锐垚
2025 年 2 月 21 日
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: 个人博客
最后更新:2025 年 3 月 8 日

叶 锐垚

游戏玩家

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。

NTR PC游戏 PS5游戏 PS30周年 RPG制作大师 Switch游戏 个人博客 休闲游戏 体育游戏 冒险游戏 动作游戏 历史 双人游戏 复古游戏 女性主角 开放世界 恐怖游戏 情色游戏 手机游戏 推理游戏 旅行指南 汽车 清版射击游戏 独立游戏 第一人称射击游戏 美国 美少女游戏 肉鸽 角色扮演游戏 读书笔记

  • 《影神图》精装版开箱:99 元值不值?
  • 《双影奇境》简评:Hazelight 再造神作,双打爱好者必玩
  • 《僵尸世界大战:劫后余生》PS5 简评:尸潮快感与挑战
  • 《工作、消费主义和新穷人》读书笔记:鲍曼透视西方社会变迁
  • 启东旅行见闻

Copyright © 2024 yeruiyao.com. All rights reserved.

Theme Kratos Made By Seaton Jiang