在使用 GitHub、Coding 等 Git 服务的时候,经常需要配置 SSH key,以便于进行 Git 操作时候的身份认证,在这里记录和总结下配置的过程。

SSH

Secure Shell(缩写为 SSH)即“安全外壳协议”,是一项创建在应用层和传输层基础上的安全协议,为计算机上的 Shell(壳层)提供安全的传输和使用环境。

传统的网络服务程序,如 FTP、POP 和 Telnet 其本质都是不安全的,因为它们在网络上使用明文传送数据、用户账号和用户口令,很容易受到中间人攻击方式的攻击。而 SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。其优点如下:

  • 通过 SSH 可以对所有的传输的数据进行加密。
  • SSH 为其传输的数据可以是经过压缩的,可以加快传输的速度。

SSH 提供两种级别的安全验证:

  • 基于密码。通过账号和密码登陆远程主机后,所有的传输数据都会被加密。由于别的服务器可能在冒充真正的服务器,所以无法避免中间人攻击。
  • 基于密钥。需要创建一对密钥,把公共密钥放在需要访问的服务器上,客户端软件会向服务器发出请求用公共的密钥进行安全验证,服务器收到请求后先在该服务器的用户根目录下寻找用户的公有密钥,然后把它和用户发送的过来的公有密钥进行比较,如果两个密钥一致,服务器就用公有密钥加密“质询”(challenge)并把它发送给客户端软件。该方式可以避免中间人攻击。

Git SSH

通过上面的介绍,知道了首先要在本地和 GitHub 之间建立连接,这种连接可以通过 SSH 进行。

配置 Git 的用户名和邮箱

如果是首次使用 Git,需要先设置usernameemail

1
2
git config --global user.name "yedanbo"
git config --global user.email "yedanbo@qq.com"

生成 SSH key

许多 Git 服务器都使用了 SSH 公钥进行认证。为了向 Git 服务器提供 SSH 公钥。如果某系统用户尚未拥有密钥,必须事先为其生成一份。这个过程在所有操作系统上是相似的。

首先,需要确定自己是否已经拥有密钥。默认情况下,用户的 SSH 密钥存储在~/.ssh目录下。进入该目录列出其中内容,便可以快速确定自己是否已经拥有密钥:

1
2
cd ~/.ssh
ls

在目录下寻找一对以id_rsa命名的文件,其中一个带有.pub扩展名。.pub文件是公钥,另一个则是密钥。如果找不到这样的文件(或者根本没有.ssh目录),可以通过运行ssh-keygen来创建它们。

1
ssh-keygen -t rsa -C "yedanbo@qq.com"

首先ssh-keygen会确定密钥的存储位置(默认是.ssh/id_rsa),然后它会要求你输入两次密钥口令。如果不想在使用密钥时输入口令,将其留空直接回车即可。

此时,可以在用户目录找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是 SSH Key 的密钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

添加 SSH key 到 GitHub 账户

登陆 GitHub,打开 “Account Setting” ,在设置边栏选择 “SSH and GPG keys” 选项,点击 “New SSH key” 按钮,填写任意 Title,在 Key 文本框粘贴id_rsa.pub文件的内容:

点击 “Add Key” ,然后输入确认密码添加完成,就可以看到已经添加的 Key

添加成功后会收到也会收到一封标题为“[GitHub] A new public key was added to your account”的邮件表示 SSH key 已经添加成功。

为什么 GitHub 需要 SSH key 呢?因为 GitHub 需要识别出你推动的提交确实是你的,而不是别人冒充的,而 Git 支持 SSH 协议,所以,GitHub 只要知道了你的公钥,就可以确认只有你自己才能推动。

测试 SSH 连接

1
ssh -T git@github.com

看到类似如下的警告信息,然后键入yes回车,如果看到包含用户名的信息,就说明成功了。

更多使用场景

同时使用 GitHub 和 GitLab 等其他 Git 系统

假设同时使用两个或以上的 Git 系统,如我的个人项目代码托管在 GitHub 仓库,而在公司代码托管在内网的 GitLab 私有仓库。由于 Git 服务器是基于 SSH 公钥认证,在可以把同一个公钥(id_rsa.pub文件内容)同时添加到多个 Git 系统上。如在 GitLab 上也添加了id_rsa.pub公钥

多台电脑同时使用 GitHub

GitHub 都允许添加多个 key。比如我有多台电脑,会在公司电脑提交代码,也会在家里的电脑上提交代码,只要把每台电脑的 key 都添加到 GitHub,就可以在每台电脑上往 GitHub 推送了。如我的 GitHub 添加了三台电脑的 SSH key

在 SourceTree 中导入 SSH key

SourceTree 作为常用的带有 GUI 的 Git 工具,其内置了 Git 系统,可以进行可视化的 Git 操作。如果之前在电脑的上已经生成过 SSH key,无需再次生成,可以直接导入 SourceTree 即可使用。

打开 SourceTree,选择菜单“工具” - “选项”

在选项设置面板选择“SSH 密钥”选择电脑上生成的id_rsa私钥文件,“SSH 客户端”选择OpenSSH

接下来就可以在 SourceTree 中进行各种 Git 操作了。