在日常开发过程中,我们经常用到Github或者Gitlab等平台来对自己的代码进行版本控制。它们支持Https和SSH两种通信协议。使用HTTPS协议时,每次pull或者push操作都需要输入用户名和密码,非常麻烦。相较而言SSH协议则方便得多,只需要我们进行一些初始的配置工作, 后续的操作中,它不需要我们输入用户名密码。
Git配置SSH key
运行终端(Windows平台可以使用Git Bash),输入以下命令:
1
2cd ~/.ssh
ls如果已经存在id_rsa.pub 或 id_dsa.pub 文件,可以直接到第3步。
创建SSH KEY
1
ssh-keygen -t rsa -C "[email protected]"
代码参数含义:
-t 指定密钥类型,默认是 rsa ,可以省略。
-C 设置注释文字,比如邮箱。
-f 指定密钥文件存储文件名。以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如:
1
2Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]当然,你也可以不输入文件名,使用默认文件名(推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。
接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码),
当然,你也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交到Github上了,如:
1
2Enter passphrase (empty for no passphrase):
Enter same passphrase again:接下来,就会显示如下代码提示,如:
1
2
3
4Your identification has been saved in /c/Users/you/.ssh/id_rsa.
Your public key has been saved in /c/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 [email protected]当你看到上面这段代码,就说明你的 SSH key已经创建成功,将其添加到Github的SSH key就可以了。
添加你的 SSH key到 Github
a. 需要拷贝 id_rsa.pub 文件的内容,你可以用编辑器打开文件复制,也可以用git命令复制该文件的内容,如:
1
clip < ~/.ssh/id_rsa.pub
b. 登录Github账号,从右上角的
Settings
进入,点击菜单栏的SSH and GPG keys
。c. 点击
New SSH key
按钮添加一个 SSH key。把复制的SSH key代码粘贴到Key所对应的输入框中,记得SSH key代码的前后不要留有空格或者回车。上面的Title对应的输入框可以输入一个该SSH key显示在Github上的别名,默认的会使用你的邮件名称。测试SSH key
在终端(或Git Bash)中输入以下命令:
1
ssh -T [email protected]
当输入以上代码时,会有一段警告代码,如:
1
2
3The 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回车既可。如果在创建 SSH key 的时候设置了密码,接下来就会提示输入密码,如:
1
Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':
如果你密码输错了,会再要求你输入,直到输入正确为止。
注意:输入密码时如果输错一个字就会不正确,使用删除键是无法更正的。
密码正确后会看到下面这段话:
1
2Hi yourUsername! You've successfully authenticated, but GitHub does not
provide shell access.如果用户名是正确的,说明SSH密钥设置成功。如果看到 ”access denied” ,这表示拒绝访问,那就需要使用 Https去访问,而不是SSH 。
可能的问题
上面的SSH key配置成功,但是pull或push代码时仍然要求输入用户名和密码。
这是由于当前项目使用的是Https协议,而不是SSH,我们需要进行以下操作:
1
2git remote remove origin
git remote add origin [email protected]:Username/YourRepoName.git接下来重新设置track branch:
1
git branch --set-upstream-to=origin/master master
完成这一步应该可以正常免用户名和密码进行Git操作了。