将 SSH 私钥更改为现有的

Posted

技术标签:

【中文标题】将 SSH 私钥更改为现有的【英文标题】:Change a SSH private Key to an existing one 【发布时间】:2021-11-26 17:59:46 【问题描述】:

我不得不将我的 Mac 恢复出厂设置,现在我要再次配置我需要的所有开发工具,例如 Ruby/Rails 等...

下一步是配置 git,我的问题是关于我的 ssh 密钥:

从我之前的配置中,我将我的私有 ssh 密钥保存在一个文本文件中(我不知道这在安全性方面是否是个好主意,但这不是重点),只是从我的终端复制它并粘贴它一个文本文件。

我想再次使用该私有 ssh 密钥,而不是创建一个新的公共和私有密钥。我怎样才能做到这一点?我是否必须创建一个新的,然后以某种方式将其替换为我之前保存的那个?如果有,怎么做?

如果您的回答非常具体,我们将不胜感激,因为我对这个主题并不熟悉。

提前非常感谢!

【问题讨论】:

【参考方案1】:

您只需复制 .ssh 文件夹中的现有密钥即可。

如果您没有文件夹,请创建一个

mkdir ~/.ssh

复制文件(这些可能是id_rsa,所以请检查之前的名称)

mv path_to_your_existing/id_ed25519 ~/.ssh/id_ed25519
mv path_to_your_existing/id_ed25519.pub ~/.ssh/id_ed25519.pub

注意:

你可能需要这样做

ssh-add -K ~/.ssh/<private_key_file>

【讨论】:

【参考方案2】:

警告!!!

重复使用私钥几乎总是是个坏主意。在您的特定情况下,它可能是合理的,但对于可能看到此答案的其他用户来说,重新生成一对新密钥通常是更好的选择

钥匙位置

默认情况下,ssh 密钥存储在~/.ssh 下(默认隐藏)。如果需要,创建此目录。然后你可以把你保存的私钥放在那里,命名为id_rsa。既然你提到,你对这个主题不是很常见,我想你运行简单的ssh-keygen 来获取这个没有额外选项的密钥,并且默认情况下得到一个这样命名的密钥。

在这一步之后,将复制的文件所有者更改为您的用户(可以使用chown &lt;your username&gt; &lt;private key file&gt; 实现)并将权限更改为 600(使用chmod 600 &lt;private key file&gt;

正如@DeepakMahakale 所说,在此操作之后,您可能需要执行ssh-add -K ~/.ssh/id_rsa 将您的密钥添加到系统已知的密钥列表中。

重新生成您的公钥

您可能需要再次从您的私钥中获取公钥。为此,只需运行 ssh-keygen,提供现有的私钥,如下所示:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

其中~/.ssh/id_rsa 是指向私钥的路径,~/.ssh/id_rsa.pub 是指向将生成的公钥的路径

【讨论】:

这无济于事,因为公钥与许多其他地方相关联。例如 github 帐户,与某些服务器的 ssh 访问。 @DeepakMahakale 纠正我,如果我错了,但是要连接到远程服务器,您不需要公钥。只有私人就足够了。因此,在~/.ssh/ 下复制保存的密钥就足以连接到 GitLab 等。我添加了关于重新生成公钥的部分,以防作者将来需要它。例如。将此新密钥添加到新的 ssh 服务器。 这会创建相同的公钥吗?我记得过去我必须将我的新公钥提供给 devops 以授予我对我们私人服务器的 ssh 访问权限,以便他们可以将其添加到 authorized_keys 它可能不会生成完全相同的密钥,但不会使以前的密钥失效,作者已经在远程服务器上使用过。这样,如果作者有以前的 pubkey 的 GitLab 帐户,他/她仍然可以使用它。但是,如果作者决定创建 GitHub 帐户,他/她将简单地重新生成 pubkey 并在那里使用它 非常感谢您的回复。有效! :)【参考方案3】:

您是否有以下位置: C:\Users\User\ssh\authorized_keys 要将您保存的密钥放入其中?

我个人遇到的唯一一个,我不得不用写字板++打开这个文件“授权密钥”,然后添加密钥。

如果这不起作用,请参阅此处:Click here

【讨论】:

以上是关于将 SSH 私钥更改为现有的的主要内容,如果未能解决你的问题,请参考以下文章

收到“警告:未受保护的私钥文件!”尝试导入 SSH 密钥时出现错误消息 [关闭]

Linux密钥登陆

将 PuTTY/ppk 私钥加载到 Paramiko 时出现“base64 解码错误:填充不正确”

登录 ssh 时出现“权限太开放”

GitLab关于SSH的使用

Git 版本管理