专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 为SSH设置密钥的方法

为SSH设置密钥的方法

更新时间:2022-02-09 09:41:59 来源:动力节点 浏览3105次

为 SSH 设置密钥

当我们与远程 Git 服务器(例如 GitHub)交互时,我们必须在请求中包含凭据。这证明我们是一个特定的 GitHub 用户,他们可以做任何我们要求做的事情。

Git 可以使用 HTTPS 或 SSH 这两种协议之一与远程服务器通信,并且不同的协议使用不同的凭据。

在这里,我们描述了 SSH 协议的凭据设置。如果您不确定是使用 HTTPS 还是 SSH,请阅读HTTPS 与 SSH。从现在开始,我们假设您已有意选择设置 SSH 密钥。

1.SSH 密钥

与单独使用密码相比,SSH 密钥提供了一种更安全的登录服务器方式。虽然最终可以通过蛮力攻击破解密码,但仅靠蛮力几乎不可能破译 SSH 密钥。生成密钥对会为您提供两个长字符串:公钥和私钥。您可以将公钥放在任何服务器上(例如 GitHub!),然后通过使用已经拥有私钥的客户端(您的计算机!)连接到它来解锁它。当两者匹配时,系统无需密码即可解锁。您可以通过使用密码保护私钥来进一步提高安全性。

改编自GitHub和Digital Ocean提供的说明。

2.SSH 概述和建议

必须发生的事情的高级概述:

创建公私 SSH 密钥对。从字面上看,2 个特殊文件,在一个特殊的地方。(可选)使用密码加密私钥(最佳实践)。

将私钥添加到您的 ssh-agent。如果您使用密码保护它,您可能需要额外的配置。

将您的公钥添加到您的 GitHub 个人资料中。

建议:

如果您是编程和 shell 的新手,起初您可能会发现 HTTPS 更容易(第9章)。您以后可以随时切换到 SSH。您可以使用计算机 A 中的一种方法和计算机 B 中的另一种方法。

您应该定期更换您的 SSH 密钥。一年一次之类的。

最佳做法是使用密码保护您的私钥。这会使设置和使用变得更加困难,因此,如果您(还)还没有准备好,请不要使用密码或认真考虑改用 HTTPS。

不要为了只有一对密钥,在多台计算机上重复使用而做奇怪的体操。您可能应该每台计算机都有一个密钥(我这样做)。有些人甚至每台计算机、每项服务都有一个密钥(我不这样做)。

将多个公钥与您的 GitHub 帐户关联是正常的。例如,您连接的每台计算机都有一个公钥。

3.你已经有钥匙了吗?

您可以从 RStudio 或 shell 进行检查。

全球建议:如果您确实有现有的密钥,但不知道它们来自哪里或为什么创建它们,您应该认真考虑创建一个新的 SSH 密钥对。由您决定是否/如何删除旧的。但不要让这阻止您创建新密钥并继续前进。

(1)来自 RStudio

转到工具 > 全局选项...> Git/SVN。~/.ssh/id_rsa如果您在 SSH RSA 密钥框中看到类似内容,则您肯定有现有的密钥。

警告:RStudio 仅查找名为id_rsaand的密钥对id_rsa.pub。这是有道理的,因为从历史上看,这是最常见的。

然而,现在 GitHub 和 GitLab 都在鼓励用户使用 Ed25519 算法生成 SSH 密钥,这会产生一个名为id_ed25519and的密钥对id_ed25519.pub。在撰写本文时,RStudio 不会显示这样的密钥对,这可能会造成混淆。因此,最好同时检查 shell 中的现有密钥。

(2)从外壳

转到外壳(附录A)。

列出现有键:

ls -al ~/.ssh/

如果您被告知~/.ssh/不存在,则说明您没有 SSH 密钥!

如果您看到id_rsa.pubandid_rsa或id_ed25519and之类的一对文件id_ed25519.pub,则您已经有了一个密钥对。典型的模式是id_FOO.pub(公钥)和id_FOO(私钥),其中FOO反映了密钥类型。如果您乐于使用现有密钥,请跳至有关向 ssh-agent 和 GitHub 添加密钥的部分。

4.创建 SSH 密钥对

(1)选项 1:从 RStudio 设置

转到工具 > 全局选项...> Git/SVN > 创建 RSA 密钥...。

RStudio 会提示您输入密码。它是可选的,但也是最佳实践。使用受密码保护的密钥配置系统以实现平稳运行会引入更多移动部件。如果您完全是新手,请跳过密码(或使用 HTTPS!)并在下次您对系统配置更熟悉时实施它。起初我没有使用密码,但现在我使用了,并将其记录在密码管理器中。

单击“创建”,RStudio 将生成一个 SSH 密钥对,存储在文件~/.ssh/id_rsa和~/.ssh/id_rsa.pub.

请注意,RStudio 目前只生成 RSA 密钥,而 GitHub 和 GitLab 的标准建议是使用 Ed25519 密钥。如果您想遵守该建议,请暂时在 shell 中生成您的密钥。

(2)选项 2:从 shell 设置

像这样创建密钥对,但替换对您有意义的注释,特别是如果您的生活中有多个 SSH 密钥。考虑与您的 GitHub 帐户关联的电子邮件或您的计算机名称或某种组合,例如 your_email@example.comormacbook-pro或jane-2020-macbook-pro。

ssh-keygen -t ed25519 -C "DESCRIPTIVE-COMMENT"

如果您的系统似乎太旧而无法支持 Ed25519 算法,请改为执行以下操作:

ssh-keygen -t rsa -b 4096 -C "DESCRIPTIVE-COMMENT"

接受将密钥保存在默认位置的建议。只需在此处按 Enter:

Enter file in which to save the key (/Users/jenny/.ssh/id_ed25519):

您可以选择使用密码保护密钥。它是可选的,但也是最佳实践。使用受密码保护的密钥配置系统以实现平稳运行会引入更多移动部件。如果您完全是新手,请跳过密码短语并在下次对系统配置更熟悉时实施它。起初我没有使用密码,但现在我使用了,并将其记录在密码管理器中。

Enter passphrase (empty for no passphrase):
Enter same passphrase again: 

该过程现在应该完成并且应该看起来像这样:

~ % ssh-keygen -t ed25519 -C "jenny-2020-mbp"        
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/jenny/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/jenny/.ssh/id_ed25519.
Your public key has been saved in /Users/jenny/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:XUEaY/elhcQJz3M9jx/SdC0zh10lCA7uNpqgkm5G/R0 jenny-2020-mbp
The key's randomart image is:
+--[ED25519 256]--+
|        . =o==oo*|
|       . + =.=+B+|
|        . o . @oB|
|       . . .  oO+|
|  . .   S .  ..o.|
| o o . E .    ...|
|+ . . + .       .|
|.+   . .         |
|o.               |
+----[SHA256]-----+

(3)向 ssh-agent 添加密钥

告诉您的 ssh-agent 有关密钥,尤其是设置它以管理密码(如果您选择设置一个)。

事情在这里变得有点特定于操作系统。如有疑问,请查阅GitHub 的 SSH 说明,该说明适用于 Mac、Windows 和 Linux。它还比我能解释更多不寻常的情况。

1)Mac 操作系统

确保 ssh-agent 已启用。这是成功的样子(pid会有所不同):

~ % eval "$(ssh-agent -s)"
Agent pid 15360

有时这会像这样失败:

~ % eval "$(ssh-agent -s)"
mkdtemp: private socket dir: No such file or directory

类似的失败可能会报告为“权限被拒绝”。您应该以超级用户身份再试一次。完成后不要忘记使用exit回到您的普通用户帐户!

~ % sudo su
Password:
sh-3.2# eval "$(ssh-agent -s)"
Agent pid 15385
sh-3.2# exit
exit

将您的密钥添加到 ssh 代理。如果您设置了密码,您将在这里受到挑战。给它。该-K选项将您的密码存储在钥匙串中。

~ % ssh-add -K ~/.ssh/id_ed25519
Enter passphrase for /Users/jenny/.ssh/id_ed25519: 
Identity added: /Users/jenny/.ssh/id_ed25519 (jenny-2020-mbp)

如果您使用的是 macOS Sierra 10.12.2 及更高版本,则需要再做一件事。创建一个~/.ssh/config包含以下内容的文件:

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519

UseKeychain如果您没有使用密码短语,您可以省略该行。但如果你这样做了,这应该将你的密码永久存储在钥匙串中。否则,您每次登录时都必须输入它。有用的 StackOverflow 线程:如何将我的 SSH 私钥永久添加到 Keychain,以便它自动可用于 ssh?.

2)窗口

在 Git Bash shell 中,确保 ssh-agent 正在运行:

$ eval $(ssh-agent -s)
Agent pid 59566

添加您的密钥,用正确的名称替换您的密钥。

$ ssh-add ~/.ssh/id_ed25519

3)Linux

在 shell 中,确保 ssh-agent 正在运行:

$ eval "$(ssh-agent -s)"
Agent pid 59566

添加您的密钥,用正确的名称替换您的密钥。

ssh-add ~/.ssh/id_ed25519

5.向 GitHub 提供公钥

现在我们将您的公钥副本存储在 GitHub 上。

(1)RStudio 到剪贴板

转到工具 > 全局选项...> Git/SVN。如果您的密钥对命名为id_rsa.puband id_rsa,RStudio 将看到它并提供“查看公钥”。这样做并接受复制到剪贴板的提议。

如果您的密钥对命名不同,例如id_ed25519.puband id_ed25519,您将不得不以另一种方式复制公钥。

(2)Shell 到剪贴板

将公钥复制到剪贴板上。例如,~/.ssh/id_ed25519.pub在编辑器中打开并将内容复制到剪贴板。或者在命令行执行以下操作之一:

苹果系统:pbcopy < ~/.ssh/id_ed25519.pub
视窗:clip < ~/.ssh/id_ed25519.pub
Linux:xclip -sel clip < ~/.ssh/id_ed25519.pub
Linux:如果需要,xclip通过apt-get或安装yum。例如,sudo apt-get install xclip。

(3)在 GitHub 上

现在我们向 GitHub 注册公钥。单击右上角的个人资料图片,然后转到“设置”>“SSH 和 GPG 密钥”。单击“新建 SSH 密钥”。将您的公钥粘贴到“密钥”框中。给它一个信息性标题,大概是在创建密钥期间重复您在上面使用的描述性注释。单击“添加 SSH 密钥”。

理论上,我们完成了!您可以使用它ssh -T git@github.com来测试您与 GitHub 的连接。如果大家想了解更多相关知识,可以关注一下动力节点的SSH整合视频教程,里面有更丰富的知识在等着大家去学习哦。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>