关于git通过ssh拉去代码时报错:没有权限或者ssh key过期

关于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