Git之ssh连接多个远程仓库

本地仓库ssh连接多个远程仓库

由于GitHub不同的两个账户不可以配置相同的公钥,因此本地仓库ssh连接多个远程仓库必须生成不同的密钥

1.生成密钥

对于使用ssh连接远程仓库,需要生成非对称密钥并将公钥添加到远程仓库中

1
2
cd ~/.ssh
ssh-keygen -t rsa -f ~/.ssh/<filename> -C "yourmail@xxx.com"

通常id_rsaid_rsa.pub是默认密钥,额外生成的密钥需要自定义

2.配置ssh的config

  1. 创建config文件

    1
    2
    3
    cd ~/.ssh
    touch config
    vim config
  2. 编辑配置文件,使不同密钥指向不同远程仓库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 第一个账号,默认使用的账号
    Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa
    # 第二个账号
    Host second.github.com # second为前缀名,可以任意设置
    HostName github.com
    User git
    IdentityFile ~/.ssh/<filename>
  3. 清空本地缓存,添加新的ssh密钥到SSH agenth中

    1
    2
    3
    ssh-add -D
    ssh-add id_rsa
    ssh-add <filename>

    原理分析
    1.ssh 客户端是通过类似 git@github.com:githubUserName/repoName.git ** 的地址来识别使用本地的哪个私钥的,地址中的 User 是@前面的git, Host 是@后面的github.com。
    2.如果所有账号的 User 和 Host 都为 git 和 github.com,那么就只能使用一个私钥。所以要对User 和 Host 进行配置,让每个账号使用自己的 Host,每个 Host 的域名做 CNAME 解析到 github.com,如上面配置中的Host second.github.com
    3.配置了别名之后,新的地址就是git@second.github.com:githubUserName/repName.git**(在添加远程仓库时使用)。
    这样 ssh 在连接时就可以区别不同的账号了

  4. 测试ssh链接

    1
    2
    3
    4
    ssh -T git@github.com
    ssh -T git@second.github.com
    # xxx! You’ve successfully authenticated, but GitHub does not provide bash access.
    # 出现上述提示,连接成功

3. 仓库配置

  1. 设置远程仓库即可,注意对应,比如说这个公钥放在了第二个仓库,就要注意修改host

    1
    git remote add <remotename> git@second.github.com:githubUserName/repName.git