我们在 windows 操作系统下可以直接用 github desktop 实现傻瓜式操作,但是在如 ubuntu 这种 linux 系统下如果想要在github克隆仓库、推送代码就需要使用命令行交互。若使用 HTTP 在推送代码的时候需要校验非常麻烦,因此本文总结了在 ubuntu环境下配置 SSH 连接 github 的操作步骤。
首先需要生成 SSH 密钥对,首先可以通过命令查看自己的服务器 or 主机上面是否已经存在了 SSH 密钥,在 bash 输入以下命令:
ls ~/.ssh/
若看见类似 id_ed25519
, id_ed25519.pub
类似的输出(取决于加密方式),则说明本地已经存在一个密钥对无需再重复生成。此时如果重复生成可能会破坏已经建立好的 SSH 连接(影响用同一台服务器的小伙伴)
若尚未生成密钥对,在终端输入以下命令:
ssh-keygen -t ed25519 -C "your_email@example.com"
此时应该能够在 ~/.ssh/
路径下见到 id_ed25519
, id_ed25519.pub
。如果首次生成密钥,或者本地的 SSH 配置进行了更新,都需要私钥添加到 SSH 代理中(SSH 配置在 ubuntu 更新中可能会有影响,因此也需要检查)。终端运行以下命令可以查看当前 SSH 代理有没有加载私钥:
ssh-add -l
如果输出结果为:
The agent has no identities.
则表示当前 SSH 代理中并没有加载本地的私钥,我们需要通过以下命令加载:
ssh-add ~/.ssh/id_ed25519
加载完成后重新查看 SSH 代理加载的私钥列表,可以看到我们所加载的公钥的指纹(表明对应的私钥被成功加载到本地的 SSH 代理中)。至此私钥的配置完成。
接下来需要配置公钥到 github 账户中,通过以下命令复制公钥添加到 github
cat ~/.ssh/id_ed25519.pub
登录 github 点击头像选择 Settings,在菜单中找到 SSH and GPG keys 后根据指示操作即可,把公钥的内容粘贴到 Key 字段中,并确认添加 SSH key
完成 SSH 公钥添加之后会在 github 页面中显示对应公钥的指纹,如 SHA256:sECgpwYMqVRpxgbZ/ib4klpPT+YleiL/NxiuO/tb+lU
。该指纹是公钥经过加密哈希函数处理后生成的一串短小、唯一的标识符,不可逆。因此我们将无法直接在 github 中查看公钥的原文,如果需要比对我们在 github 中添加的公钥跟本地的公钥是否一致,需要用以下命令计算我们本地公钥的指纹:
ssh-keygen -lf ~/.ssh/id_ed25519.pub
其中:-l
表示 list fingerprint,-f
指定要查看指纹的密钥文件路径(其实都可以通过 ssh-keygen --help
查看)
添加成功后使用命令来测试 SSH 连接是否成功:
ssh -T git@github.com
一切正常会看到类似如下信息:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
当然在国内连接 github 经常遇到奇奇怪怪的问题,之前就试过在前面配置完全正常的情况下 SSH 始终无法成功连接 github 账户。这个时候考虑在本地的 .ssh/config
文件中配置流量路径
Host github.com
Hostname ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/id_ed25519
规定通过 SSH 连接到 github 的流量走 443 端口,而非国内经常受阻的默认 22 端口
某些网络(如公司防火墙、学校或公共WiFi)会屏蔽SSH默认的22端口,导致连接失败。
之后就可以使用命令行克隆本人的公有或私有仓库了,并且还能随便 pull 和 push 无需输入密码
git clone git@github.com:username/repository.git
如果需要把 github 仓库 http
连接改成成 ssh
连接,可以执行以下操作:
git remote set-url origin <your-ssh-url>
成功完成操作之后,可以通过以下命令检查仓库的连接地址,修改前后会从 http
链接修改为 ssh
链接
git remote -v
references:
手把手教你配置GitHub SSH密钥,轻松克隆仓库_github密钥配置-优快云博客