关于git报错:key过期或者无权限
代码拉取中的ssh
拉取逻辑
- 本地往
git
服务端发送拉取请求时,在请求中携带身份信息(用于验证存储于该git
服务的公钥列表中的本地公钥) -
git
服务验证公钥中确实存在,则通过验证,然后用此公钥发送响应给本地,本地使用配置的密钥进行解密。
ssh
公钥选取逻辑
如果我的ssh文件夹中存在多个公钥和密钥,那么本地将会发送哪个公钥过去进行验证?
- 如无特别配置的情况下:
- 如果曾经使用过某一公钥/密钥对该
git
服务成功链接,那么大概率本次链接还是这对公钥/密钥 - 如果本地没有使用过公钥/密钥与该
git
服务进行过链接,则可能是从ssh
文件夹中,按某种顺序,逐一发送公钥,直到公钥在git
服务上找到对应信息为止。
- 如果曾经使用过某一公钥/密钥对该
- 如有配置:
- 则根据配置信息选取公钥进行发送
解释
根据上述,可以发现,如果本地有多个公钥密钥,但是有时会出现没权限或者key
过期的情况,因为当前使用的公钥/密钥在git
服务上过期或者对该git
项目无权限,这时,你配置再多的公钥/密钥上去,也是无用功。
解决
配置git
拉取设置->在ssh
文件夹中创建config文件
通过这个配置可以规定对于某个服务,使用哪个私钥文件,这样就可以指定私钥来链接服务了。
Host gitlab.ceshiren.com #这个是服务的地址
HostName gitlab.ceshiren.com
User git
IdentityFile ~/.ssh/id_rsa_ou
IdentitiesOnly yes