飞虎兄

飞虎兄

Developer

© 2019

  • Git 配置多个 SSH Key

    以前使用 git 经常遇到这样的问题: 项目A 位于 github ,使用 ssh key A 提交代码; 项目B 位于 gitlab ,使用 ssh key B 提交代码。 这样本地就存储了两个私钥,在来回切换项目并提交代码的时候怎么办呢?

    使用 ssh config 映射文件

    ~/.ssh/ 文件下创建 config 文件,内容如下:

    # github user
      Host github.com
      HostName github.com
      User git
      IdentityFile /Users/brandon/.ssh/id_rsa_github
    
    # gitlab user
      Host gitlab.com
      HostName gitlab.com
      User git
      IdentityFile /Users/brandon/.ssh/id_rsa_gitlab
    

    文件内容格式:

    标签 描述
    Host 仓库主机,对应具体项目下的.git/config中的url中的主机名
    HostName 仓库主机名称
    User 用户名,对于 git 来说就是固定值 git
    IdentityFile ssh 私钥 路径

    如上面描述的一样,Host 对应的是项目中的.git目录中config文件中的远程仓库url 的主机名,这样可以解决一个问题:假如项目 A 和项目 C 都位于 github,但是使用了不同的 ssh key 。 这种情况下可以使用如下配置:

    • 项目 A 配置, 同上
    • 项目 C 配置:
      • 项目 C/.git/config
      [remote "origin"]
        url = git@github2:brandon/project-c.git
      
    • ~/.ssh/config
      # github user
      Host github.com
      HostName github.com
      User git
      IdentityFile /Users/brandon/.ssh/id_rsa_github
    
      Host github2
      HostName github.com
      User git
      IdentityFile /Users/brandon/.ssh/id_rsa_github_2
    
      # gitlab user
      Host gitlab.com
      HostName gitlab.com
      User git
      IdentityFile /Users/brandon/.ssh/id_rsa_gitlab
    

    验证 ssh key

    使用如下命令可以验证配置是否正确:

    ssh -T github.com
    

    补充

    之前切换仓库地址的时候经常使用ssh-add命令来添加私钥, 假如从 github 切换到 gitlab

    # 删除 github 私钥
    ssh-add -d /Users/brandon/.ssh/id_rsa_gitlab.pub
    # 添加 gitlab 私钥
    ssh-add /Users/brandon/.ssh/id_rsa_gitlab
    

    但是有了 ssh config 文件之后就不用这么麻烦了。