Git配置多个SSHKey

背景

很多公司都选择git作为代码版本管理工具,然后公司搭建私有的gitlab来管理代码,我们有时候也有自己的git需要管理,我们在clone代码的时候可以选择http协议,当然我们亦可以选择ssh协议来拉取代码。这时候我们就需要生成多个ssh key来满足需求。

解决方案

配置单个SSH Key

单个SSH生成

配置多个SSH Key

多数时候我们电脑上会有很多的git host,比如公司gitlabgithub、个人的等,那我们就需要在本地配置多个ssh key,使得不同的host能使用不同的ssh key ,做法如下(以gitlabgithub为例):

  1. 生成gitLab生成的ssh key

     ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/gitlab-rsa
    
  2. github生成的ssh key

     ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/github-rsa
    
  3. 查看user目录下ssh目录(隐藏文件)下是否存在config文件,如果没有则需要生成config文件。

     //生成config文件
     touch config
    
  4. config文件中配置多个不同的host使用不同的ssh key

     # gitlab
     Host gitlab.com
         Host gitlab
         HostName gitlab.com
         User [email protected]
         PreferredAuthentications publickey
         IdentityFile ~/.ssh/gitlab-rsa.pub
     # github
     Host github.com
         Host github
         HostName github.com
         User [email protected]
         PreferredAuthentications publickey
         IdentityFile ~/.ssh/github-rsa.pub
     # 配置文件参数
     # Host : Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件
     # HostName : 要登录主机的主机名( 服务器IP)
     #  Port 22 : 端口
     # User : 用户名
     # IdentityFile : 指明上面User对应的identityFile路径,认证文件
     # StrictHostKeyChecking : yes 关闭提示
    

注意⚠️:生成ssh key时,-f ~/.ssh/gitlab-rsa~/.ssh/gitlab-rsa是生成路径,必须正确。

问题

按照常规方法生成 ssh key ,并将 public key 添加到 git 账户中后,ssh 链接失败,一直报错 [email protected]: Permission denied (publickey).

问题

使用ssh -vvv [email protected]可调试 ssh ,结果如下:

结果

通过调用ssh -vvv [email protected]查看详细的报错信息,我发现每次本地寻找私钥的时候都找不到对应的文件,但是这些文件的路径是正确的呀,我开始思考是不是在ssh_config文件中没有设置对应的路径呢?

所以去etc\ssh\ssh_config文件中查看,发现大部分全部被注释掉了。

解决办法

找到 ssh_config 文件,做出如下设置:

Host *
    SendEnv LANG LC_*
    IdentityFile ~/.ssh/github-rsa
    IdentityFile ~/.ssh/gitlab-rsa
    HostkeyAlgorithms +ssh-rsa  
    PubkeyAcceptedAlgorithms +ssh-rsa
    PubkeyAcceptedKeyTypes +ssh-rsa

重新链接即可成功。

**注意⚠️:etc在mac的根目录,ssh在用户目录下的隐藏文件

你可能感兴趣的:(Git配置多个SSHKey)