Git是目前世界上最先进的分布式版本控制系统(没有之一)。github是一个神奇的网站,这个网站可以提供git仓库托管服务,如果注册了github账号,就可以获得免费的git远程仓库。由于本地git仓库和github仓库之间的传输是通过SSH加密的,所以要想将github的远程仓库与本地git仓库关联起来,你需要在github网站上添加你本地计算机的SSH key。
在github账号中添加SSH key本身并不复杂,廖雪峰老师的git教程中远程仓库 一节中就给出了图文并茂的详细说明,github自身也提供了一份帮助说明文档,这篇博客的主要内容,就是对后者的翻译。
Disclaimer
在翻译的过程中,发现似乎都是以Git Bash这个工具作为说明对象的,但是在重要的地方也做了特别说明,我自己在Linux下实验过了,觉得应该还是不影响实际操作的。文中以括号括起来的说明文字,都是我自己加的,对我来说是需要注意的地方,也希望对你们有所帮助吧。下面,就开始正文吧!
SSH key是一种识别可信任用户的方式,此方式下无需密码认证。以下步骤能够帮助你生成一个SSH key并将公钥添加到你的github账号。
我们建议你定期检查你的SSH key列表,并删除近段时间内没有使用的key。
小贴士:如果你在Windows上安装了github,你可以直接克隆远程仓库,无需处理SSH key。在Windows下,运行git命令的首选工具是Git Bash,Git Bash同样不需要处理SSH key。
第一步:检查SSH key
首先,检查你的计算机上现有的SSH key。打开Git Bash并输入:
$ ls -al ~/.ssh
(注:在linux下就直接通过终端输入以上命令,其中~一般代表/root)
检查目录中的文件列表,看是否已经有了共有的SSH key。默认情况下,公钥的文件名会是以下所示的某一个:
id_dsa.pub
id_ecdsa.pub
id_ed25519.pub
id_rsa.pub
(注:如果采用rsa
加密的话,公钥名会是id_rsa.pub
)
第二步:生成一个新的SSH key
不要关闭Git Bash,将下面的命令复制粘贴到里面去,注意把邮箱地址换成你在github上注册时用的邮箱地址。
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Generating public/private rsa key pair
强烈建议使用默认设置,所以当提示你
"Enter a file in which to save the key"
,直接回车。
Enter file in which to save the key (/users/you/.ssh/id_rsa): [Press enter]
接下来会要求你输入密码
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
小贴士:强烈建议使用一个好的、安全的密码。更多详情,见“Working whit SSH key passphrase”
(注:廖雪峰老师说,由于这个key也不是用于军事目的,所以也无需设置密码。所以,输入ssh-keygen命令后,一路回车即可,我就是这么做的。)输入密码后,你会得到SSH key的指纹或id。就像下面这样的:
Your identification has been saved in /users/you/.ssh/id_rsa.
Your public key has been saved in /users/you/.ssh/id_rsa.pub.
The key fingerprint is :
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com
第三步:将你的key添加到ssh-agent中
为了使用之前生成的SSH key,需要配置ssh-agent程序:
如果你在Windows上安装了github,你可以直接克隆远程仓库,无需处理SSH key。在Windows下,运行git命令的首选工具是Git Bash,Git Bash同样不需要处理SSH key。
确认ssh-agent已经启用
如果你使用的是Git Bash,用下面的命令启动ssh-agent:
ssh-agent -s
Agent pid 59566
如果你用的是其他终端,例如msysgit,用下面的命令启动ssh-agent:
eval $(ssh-agent -s)
Agent pid 59566
将生成的SSH key添加到ssh-agent:
ssh-add ~/.ssh/id_rsa
第四步: 将SSH key添加到github账号
使用SSH key之前配置一下github账号:
将SSH key复制到剪贴板中。注意将SSH key的文件名换成你自己的key的名字:
clip < ~/.ssh/id_rsa.pub
警告:切记要精确复制key文件的内容,不能添加空行或空格符号
(注:这一复制的方法好像只针对Windows平台的,我在Linux下面,是通过gedit打开id_rsa.pub,然后Ctrl+a、Ctrl+c完成的复制。)
将复制好的内容添加到github中:
在github任一页面的右上角点击你自己的头像,然后点击Settings。
在用户设置的侧边栏,点击SSH keys。
点击Add SSH key。
在Title输入框中,输入对新添加的key的描述性标签。例如,如果你在用一台个人Mac,你可以称这个key为”Personal MacBook Air”。
将SSH key的内容粘贴到Key输入框中。
点击Add Key。
确认你的github密码。
第五步
为了确保一切操作正确,现在尝试建立同github的SSH连接。连接过程中,会要求你输入密码来认证操作,这个密码就是在生成SSH key的过程中创建的密码。(注:如果你当时没有创建密码,现在也不用输入密码了。)
打开Git Bash,输入以下命令:
$ ssh -T git@github.com
你可能会看到这条警告:
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
验证警告消息中的指纹与你在下面这条消息中看到的指纹相匹配,然后输入yes:
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.如果上消息中的username是你的,那么你就成功设置了你的SSH key!
如果你收到“access denied”,你可以参考这些解决办法。
如果你从HTTPS切换到SSH,你需要更新远程仓库的URL。详情请见Changing a remote’s URL。