Linux配置SSH密钥连接GitHub仓库(以Manjaro为例)

最近给笔记本刷了Manjaro/Windows双系统,所以需要在Manjaro上重新配置一下开发环境,但是在配置git的时候发现官方教程不知道什么时候更新了,既然如此,干脆记录一下官方推荐的新的配置方案应该怎么用。毕竟通过ssh的方式推送代码速度更快,还不用每次都输入密码。


生成新SSH密钥对

由于是新系统,自然不用检查以前的密钥,那么就直接开始。

首先推荐进入~/.ssh目录,这是ssh密钥的默认保存位置,可以方便一下待会儿在重命名步骤的操作。

1
cd ~/.ssh

执行下面的命令生成新的密钥,记得将youremail@email.com替换为登录GitHub账号时的邮箱:

1
ssh-keygen -t ed25519 -C "youremail@email.com"

这里注意一下,官方教程更新后推荐使用Ed25519算法来生成密钥,关于Ed25519这个算法,可以参考官网的介绍,我这里简单贴出来一下:

image-20250713072719195

如果你使用的是不支持 Ed25519 算法的旧系统,请执行以下命令使用RSA算法加密:

1
ssh-keygen -t rsa -b 4096 -C "youremail@email.com"

运行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
eval "$(ssh-agent -s)"

正常情况下会输出`Agent pid xxxxx`,说明启动成功了,如果没有成功,可以试试下面的其他命令:

1
exec ssh-agent bash
1
exec ssh-agent zsh

启动ssh代理后,执行下面的命令将SSH私钥添加到ssh-agent:

1
ssh-add ~/.ssh/id_ed25519_github

添加成功的输出类似于Identity added: ~/.ssh/id_ed25519_github (youremail@email.com)

接下来我们需要编辑一下~/.ssh/config,如果没有这个文件自己创建一个即可,将下面的内容复制到文件中,只需要注意一下密钥的路径和名称是否对应:

1
2
3
4
5
Host github
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes

修改完成后,我们本地的配置基本就完成了。


将SSH公钥添加到GitHub账户

官网推荐的是使用GitHub CLI添加,但是我并不是很喜欢,因此这里还是用网页的方式添加吧。

登录GitHub官网后,通过这个链接进入SSH密钥的设置页面,我们点击右上角的New SSH key添加公钥

image-20250713090659258

来到Add new SSH Key页面后,这里有三个可以配置的选项:

  • Title:这个公钥的别名,我个人一般习惯写设备名,方便后续更换设备后删除;
  • Key type:保持默认即可;
  • Key:这里需要填入公钥id_ed25519_github.pub中的内容。

我们可以执行下面的命令获取公钥内容:

1
cat ~/.ssh/id_ed25519_github.pub

输出的内容类似于ssh-ed25519 xxx...xxx youremail@email.com,将这一长串全部复制粘贴到Key的位置:

image-20250713091932956

最后点击Add SSH Key就完成添加了。


本地验证

完成添加后,我们可以执行下面的命令验证是否配置成功:

1
ssh -T git@github.com 

不出意外的话,输出应该是下面这样:

image-20250713092410074

至此,我们就完成了整个配置SSH密钥的过程……吗?


配置自动添加密钥

说实话,本来这篇博客已经写完了,就在我已经美滋滋的配置完Hexo的格式准备推送文章时,突然又发现了一个问题:如果我开了一个新终端,ssh-agent的代理是不会保留的,也就是说, 当我每次想用ssh密钥连接时,都需要手动完成一遍启动代理、加载私钥的过程,非常麻烦。为了解决这个问题,我稍微琢磨了一下,找到了一种解决方案。

首先,我们需要编辑shell 配置文件(根据你的 shell 选择):

1
2
3
4
5
6
7
# 添加到 ~/.bashrc 或 ~/.zshrc
if [ -z "$SSH_AUTH_SOCK" ]; then
# 启动 SSH agent
eval "$(ssh-agent -s)" > /dev/null
# 自动添加密钥
ssh-add ~/.ssh/id_ed25519_github 2>/dev/null
fi

这里注意一下,如果你有多个私钥,可以复制第6行代码,修改中间的文件名,然后接在第6行下面,就像下面这样:

1
2
3
4
5
6
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)" > /dev/null
ssh-add ~/.ssh/id_ed25519_github 2>/dev/null # 添加GitHub私钥
ssh-add ~/.ssh/id_ed25519_gitee 2>/dev/null # 添加Gitee私钥
ssh-add ~/.ssh/id_ed25519_gitlab 2>/dev/null # 添加GitLab私钥
fi

然后应用配置:

1
source ~/.bashrc  # 或 source ~/.zshrc

最后再新开一个终端,执行下面的命令验证是否配置成功:

1
2
ssh-add -l            # 应显示已加载密钥
ssh -T git@github.com # 应显示成功消息

至此,才是真正完成了所有配置SSH密钥的过程,虽然本篇是以Manjaro和GitHub为例,但对于其他Linux系统和其他需要ssh密钥连接的平台其实基本也是通用的。

参考文献:

文章背景及封面作者:

转载请注明作者及原页面链接

封面


Linux配置SSH密钥连接GitHub仓库(以Manjaro为例)
https://www.yangyus8.top/2025/07/13/250713/
作者
杨与S8
发布于
2025年7月13日
许可协议