本地仓库ssh连接多个远程仓库
由于GitHub不同的两个账户不可以配置相同的公钥,因此本地仓库ssh连接多个远程仓库必须生成不同的密钥
1.生成密钥
对于使用ssh连接远程仓库,需要生成非对称密钥并将公钥添加到远程仓库中
1
2
cd ~/.ssh
ssh-keygen -t rsa -f ~/.ssh/<filename> -C "yourmail@xxx.com"
通常id_rsa
和id_rsa.pub
是默认密钥,额外生成的密钥需要自定义
2.配置ssh的config
-
创建config文件
1
2
3cd ~/.ssh
touch config
vim config -
编辑配置文件,使不同密钥指向不同远程仓库
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> -
清空本地缓存,添加新的ssh密钥到SSH agenth中
1
2
3ssh-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 在连接时就可以区别不同的账号了 -
测试ssh链接
1
2
3
4ssh -T git@github.com
ssh -T git@second.github.com
xxx! You’ve successfully authenticated, but GitHub does not provide bash access.
出现上述提示,连接成功
3. 仓库配置
-
设置远程仓库即可,注意对应,比如说
这个公钥放在了第二个仓库,就要注意修改host 1
git remote add <remotename> git@second.github.com:githubUserName/repName.git