在你拉取git
上的代码时,提示上面的错误:你没有正确的权限。这是因为git
为了安全起见,对于代码的拉取、合并等操作都采用一套安全策略。即在用户身份没有验证的情况下,是不能进行一系列操作的。
Git
支持使用SSH
协议,来连接和验证远程服务器和服务。使用SSH
密钥,就可以在每次访问时无需提供用户名或密码,即可连接到GitHub
。
解决方法
检查是否存在SSH key
- 打开
Git Bash
- 输入命令
ls -al ~/.ssh
,检查是否存在现有SSH
密钥 - 检查目录列表,查看是否已有
SSH
公钥。
例如:
$ ls -al ~/.ssh
total 21
drwxr-xr-x 1 dell 197121 0 12月 15 16:00 ./
drwxr-xr-x 1 dell 197121 0 12月 15 17:21 ../
-rw-r--r-- 1 dell 197121 3389 12月 15 16:00 id_rsa
-rw-r--r-- 1 dell 197121 751 12月 15 16:00 id_rsa.pub
-rw-r--r-- 1 dell 197121 597 12月 15 19:40 known_hosts
如果存在,那么你可以使用这个id_rsa.pub
公钥来进行连接。当然你也可以重新生成一个新的公钥,下面就是当你没有一个公钥和私钥对的时候,或者希望重新生成一个用于身份验证的新SSH
密钥的做法。
生成一个新的SSH key
- 打开
Git Bash
- 输入命令:
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
,就会生成一对新的公钥和私钥。其中会提示让你输入需要保存文件的位置,你可以直接按Enter
键,这样就会将文件保存到默认的位置。之后还有个提示,让你输入安全密码,你也可以直接按Enter
。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/benben/.ssh/id_rsa):
Created directory '/home/benben/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/benben/.ssh/id_rsa.
Your public key has been saved in /home/benben/.ssh/id_rsa.pub.
The key fingerprint is:d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 benben@scdn.com
The key's randomart image is:
+---[RSA 4096]----+
| .=|
| B|
| .o .=o|
| .oo.. . =E|
| ooS.. ..*=+|
| ......o+@o|
| ..o o=oB|
| o. =. o=|
| .oo..o..=|
+----[SHA256]-----+
添加SSH key到你的ssh-agent
不管你是在共有git
上,还是私有git
上。通常在setting
中有关于ssh key
的设置选项,例如下面是公有github
上的截图。
将你刚才生成的公钥内容复制到GitHub
上,添加完成后,你就不用每次进行git
操作时进行身份认证。但是使用SSH密钥,如果有人获得你计算机的访问权限,那么他就可以访问使用该密钥的每个系统。因此为了更安全起见,你可以向SSH密钥添加密码,然后使用ssh-agent
安全的保存密码,这样就不必重新输入密码。
添加密码到已经存在的私钥上
之前提到,在创建一个新的私钥对时,你可以设置一个密码。现在假如你在没有设置密码的私钥对上生成一个带有密码的私钥对,那该怎么做。输入命令$ ssh-keygen -p
,这个方法同样适合修改私钥对中的密码。
测试连接
当添加完成后,你可以测试一下连接。
- 打开
Git Bash
- 输入命令
$ ssh -T git@github.com
,例如:$ ssh -T git@git.scdn.comWelcome to GitLab, @benben_2015
而在不成功的时候,一般会有提示Permission denied(publickey)