Linux配置SSH密钥连接GitHub仓库(以Manjaro为例)
最近给笔记本刷了Manjaro/Windows双系统,所以需要在Manjaro上重新配置一下开发环境,但是在配置git的时候发现官方教程不知道什么时候更新了,既然如此,干脆记录一下官方推荐的新的配置方案应该怎么用。毕竟通过ssh的方式推送代码速度更快,还不用每次都输入密码。
生成新SSH密钥对
由于是新系统,自然不用检查以前的密钥,那么就直接开始。
首先推荐进入~/.ssh
目录,这是ssh密钥的默认保存位置,可以方便一下待会儿在重命名步骤的操作。
1 |
|
执行下面的命令生成新的密钥,记得将youremail@email.com
替换为登录GitHub账号时的邮箱:
1 |
|
这里注意一下,官方教程更新后推荐使用Ed25519算法来生成密钥,关于Ed25519这个算法,可以参考官网的介绍,我这里简单贴出来一下:
如果你使用的是不支持 Ed25519 算法的旧系统,请执行以下命令使用RSA算法加密:
1 |
|
运行ssh-keygen后,系统会提示你选择密钥保存的位置,这里由于我们之前已经进入了密钥的默认保存位置,所以就不用写前面的绝对路径了(当然,如果你要更改保存位置的话另说)。为了能更好的区分密钥,我个人推荐给默认密钥重命名为id_ed25519_github
,这样既能避免以后生成别的密钥时重复写入到同一个文件(比如生成AUR的密钥),又能清晰明了的标明每个密钥对应的平台,以后删起来也方便。
注意:如果刚才是使用RSA加密的密钥,最好重命名为id_rsa_github,避免弄混
接下来系统还会询问是否要输入密码来保护密钥,虽然确实可以增加安全性,但是会变成每次使用SSH密钥都需要输入密码,很明显这违背了我使用密钥的初心(懒得输密码),因此我一般直接回车就行。
密钥生成完成后,使用ls -l
命令可以看到刚才生成的一对密钥:私钥id_ed25519_github
和公钥id_ed25519_github.pub
将SSH私钥添加到ssh-agent
我们需要将密钥添加到ssh代理,先执行下面的命令启动ssh代理:
1 |
|
正常情况下会输出`Agent pid xxxxx`,说明启动成功了,如果没有成功,可以试试下面的其他命令:
1 |
|
1 |
|
启动ssh代理后,执行下面的命令将SSH私钥添加到ssh-agent:
1 |
|
添加成功的输出类似于Identity added: ~/.ssh/id_ed25519_github (youremail@email.com)
接下来我们需要编辑一下~/.ssh/config
,如果没有这个文件自己创建一个即可,将下面的内容复制到文件中,只需要注意一下密钥的路径和名称是否对应:
1 |
|
修改完成后,我们本地的配置基本就完成了。
将SSH公钥添加到GitHub账户
官网推荐的是使用GitHub CLI添加,但是我并不是很喜欢,因此这里还是用网页的方式添加吧。
登录GitHub官网后,通过这个链接进入SSH密钥的设置页面,我们点击右上角的New SSH key
添加公钥
来到Add new SSH Key
页面后,这里有三个可以配置的选项:
- Title:这个公钥的别名,我个人一般习惯写设备名,方便后续更换设备后删除;
- Key type:保持默认即可;
- Key:这里需要填入公钥
id_ed25519_github.pub
中的内容。
我们可以执行下面的命令获取公钥内容:
1 |
|
输出的内容类似于ssh-ed25519 xxx...xxx youremail@email.com
,将这一长串全部复制粘贴到Key的位置:
最后点击Add SSH Key
就完成添加了。
本地验证
完成添加后,我们可以执行下面的命令验证是否配置成功:
1 |
|
不出意外的话,输出应该是下面这样:
至此,我们就完成了整个配置SSH密钥的过程……吗?
配置自动添加密钥
说实话,本来这篇博客已经写完了,就在我已经美滋滋的配置完Hexo的格式准备推送文章时,突然又发现了一个问题:如果我开了一个新终端,ssh-agent的代理是不会保留的,也就是说, 当我每次想用ssh密钥连接时,都需要手动完成一遍启动代理、加载私钥的过程,非常麻烦。为了解决这个问题,我稍微琢磨了一下,找到了一种解决方案。
首先,我们需要编辑shell 配置文件(根据你的 shell 选择):
1 |
|
这里注意一下,如果你有多个私钥,可以复制第6行代码,修改中间的文件名,然后接在第6行下面,就像下面这样:
1 |
|
然后应用配置:
1 |
|
最后再新开一个终端,执行下面的命令验证是否配置成功:
1 |
|
至此,才是真正完成了所有配置SSH密钥的过程,虽然本篇是以Manjaro和GitHub为例,但对于其他Linux系统和其他需要ssh密钥连接的平台其实基本也是通用的。
参考文献:
- GitHub文档 - 生成新的 SSH 密钥并将其添加到 ssh-agent
- GitHub文档 - 新增 SSH 密钥到 GitHub 帐户
- Ed25519:高速高安全签名
- 博客园 - github添加ssh密钥,通过ssh方式推送代码
文章背景及封面作者:
转载请注明作者及原页面链接