如果需要频繁的进行 GitHub pull/push 操作,使用 SSH key 绑定到 GitHub 会更加方便,绑定后将使用公钥加密来验证用户身份,比传统的用户名和密码方式更安全。

本文命令与截图对应下面的系统版本,需要先安装 Git

打开终端程序

Windows

  • 右键点击开始菜单,选择终端
  • 或是按 Windows + R 快捷键打开 运行 窗口,输入 cmd ,回车打开

macOS

  • 启动台 > 其他 > 终端
  • 启动台 或是 Commond⌘ + 空格 打开聚焦搜索,搜索 终端 或是 Terminal

安装 Git 后,使用 git -v 测试,如果安装成功会显示版本号

1
2
> git -v
git version 2.47.1

然后设置 Git 的个人信息

1
2
git config --global user.name "yourname"
git config --global user.email "[email protected]"

测试一下 github.com

Windows 10 用户可以使用 Git Bash

测试时会自动创建 .ssh 文件夹,因此你也需要测试一下

打开终端程序,运行测试命令,如果是第一次运行,需要输入 yes 确认

1
ssh -T [email protected]

我们没有添加过 SSH key,会提示 Permission denied (publickey).

创建 SSH Key

1
2
3
cd .ssh

ssh-keygen -t rsa -C "[email protected]"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:\Users\ME\.ssh>ssh-keygen -t rsa

Generating public/private rsa key pair.
# 设置保存文件名,留空则为 id_rsa
Enter file in which to save the key (C:\Users\ME/.ssh/id_rsa):
# 设置密码,留空则是没有密码
Enter passphrase (empty for no passphrase):
# 确认密码
Enter same passphrase again:

# 生成的私钥
Your identification has been saved in C:\Users\ME/.ssh/id_rsa
# 生成的公钥
Your public key has been saved in C:\Users\ME/.ssh/id_rsa.pub

.pub 后缀的是公钥,可以公开,私钥相当于个人密码,要小心保存

git 默认会查找名称为 id_rsa 的 SSH key

如果设置了文件名称,或是生成其他格式的 SSH key 可以查看后文的配合 SSH config 的部分

rsa 格式的 key 内容很长,使用 ssh-keygen -t ed25519 生成 ed25519 格式的 key,更简洁,更安全

添加公钥到 GitHub

使用命令或是文本编辑器查看公钥的内容

  • Windows 使用 type id_rsa.pub
  • macOS / Linux 使用 cat id_rsa.pub

访问 Github - SSH Keys,点击右上角 New SSH key
手动访问路径:右上角点击 头像 > Settings > SSH and GPG keys > New SSH key

github-add-ssh-key

  • Title:取个备注名字
  • Key type:不需要修改,保持默认 Authentication Key
  • Key:粘贴 id_rsa.pub 对应的文本内容
  • 点击 Add SSH key 保存

github-add-ssh-key-details

添加成功会在列表显示
github-add-ssh-key-done

此时我们再执行测试命令,就会获得成功的欢迎提示。

1
2
>ssh -T [email protected]
Hi <Your username>! You've successfully authenticated, but GitHub does not provide shell access.

配合 SSH config 使用

如果我们的私钥的名称不是 id_rsa ,我们将仍然无法成功连接 GitHub ,你可以将私钥修改文件名后再试试

1
2
3
4
> rename id_rsa id_mysshkey

> ssh -T [email protected]
[email protected]: Permission denied (publickey).
1
2
3
4
> mv id_rsa id_mysshkey

> ssh -T [email protected]
[email protected]: Permission denied (publickey).

这时我们可以通过在 .ssh 文件夹中创建一个 config 文件,填入下面的内容来告诉 git 程序在哪里找到密钥

1
2
3
4
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_mysshkey

其中 IdentityFile 部分填写私钥的路径, ~ 代表用户 Home 目录

  • Windows 相当于 C:\Users\<username>\
  • macOS 相当于 /Users/<username>/
  • Linux 相当于 /root/ 或是 /home/<username>/

再进行测试,发现又能显示成功的欢迎消息。

1
2
>ssh -T [email protected]
Hi <Your username>! You've successfully authenticated, but GitHub does not provide shell access.

以后就可以很方便的使用 Git 了!