git 添加多个ssh-key连接多平台(实测)

用同一台电脑,但我的项目可能推动到github和也能推动到oschina,即同时使用多个代码托管平台,那么该怎么做?

百度搜索一大堆,大同小异,参考别人的教程有的也可以实现,但是却并不是最简单的办法。

(测试平台win10+github+oschina)

我平时会用到github也会用到oschina,我就生成了一对秘钥,把同样的公钥添加到github也添加到oschina,使用起来并无大碍。从github clone下来的项目再次推动还是推动到github,从oschina上clone的项目,推送也是推动到oschina上面。所以网上搜出来的看很多人写的说使用不同的平台就要生成多个ssh-key,其实是没必要的。而使用相同的ssh-key不会冲突,唯一带来的隐患就是安全性,但是实际上没必要担心,这两个都是大平台,你的pub密钥被泄露的可能性也是微乎其微。

所以假如你在github上面有一个账号,oschina上有一个账号,(看清楚是各只有一个账号,如果一个平台上有多个账号就不一样了),就用下面这条指令生成一个密钥就可以了:

ssh-keygen -t rsa -C “youremail@yourcompany.com”    

    后面的邮箱地址请换成你自己的,然后在C:\Users\Administrator\.ssh  这个文件夹下打开id_rsa.pub分别把里面的内容添加到github和oschina对应账号公钥里面就可以了。然后你就可以做个测试,添加是否ok:

    ssh -T git@git.oschina.net

    ssh -T git@github.com

 


这里添加条完美的分割线,叙述下一种情况,有的人觉得我不同的平台就想用不同的ssh-key,不想公用。那么也可以

假设我们现在只生成了一个ssh-key并已经添加到了oschina上面去,下面我们就再生成一个ssh 密钥用来连接github。

ssh-keygen -t rsa -C “youremail@yourcompany.com” 

再次执行这条指令,但是这次记住了不要一直回车。而是第一个回车之后,下次要输入一个新的文件名来保存密钥。比如id_rsa_github,生成好了以后,记得放在C:\Users\Administrator\.ssh目录下面,或者一开始就直接在这个目录下面运行ssh-keygen指令就自动生成在该目录下面了。

好了,那下面我就打开id_rsa_github.pub文件,并把里面的密钥内容添加到github平台。

下面就要添加config文件

# 配置 oschina

Host gitee.com                 

    HostName gitee.com

    IdentityFile C:\Users\Administrator\.ssh\id_rsa_gitee

    PreferredAuthentications publickey

    User A

# 配置github

Host github.com 

    HostName github.com

    IdentityFile C:\Users\Administrator\.ssh\id_rsa_github

    PreferredAuthentications publickey

    User B   

 

    然后再分别测试:

    ssh -T git@git.oschina.net

    ssh -T git@github.com

 

    如果你oschina只有一个账号且使用的是默认的id_isa的话,不写进config文件里面也可以。


一台电脑操作一个平台下面多个账号,和上面的类似。比如我在github上面有两个账号githubA和githubB,我这台电脑有可能会推送到两个不同的github账号去。

假如在githubA和githubB上面添加同一个公密钥的时候是添加不了的,github会提示改密钥已经在其他账户使用了。我们可以按如下步骤操作:

使用ssh-keygen -t rsa -C “youremail@yourcompany.com”  这条命令生成两对密钥,分别命名id_rsa_githubA 和id_rsa_githubB放在/.ssh文件夹下。然后添加id_rsa_githubA.pub和id_rsa_githubB.pub到对应的github账号下面去。然后就是要配置config文件了:

 

# 配置A.github.com

Host A.github.com                 

    HostName github.com

    IdentityFile C:\Users\Administrator\.ssh\id_rsa_github_A

    PreferredAuthentications publickey

    User A

 

# 配置B.github.com

Host B.github.com 

    HostName github.com

    IdentityFile C:\Users\Administrator\.ssh\id_rsa_github_B

    PreferredAuthentications publickey

    User B

把这个config文件保存在/.ssh目录下。

—Host 这个名字我们要记得,之后就是通过他来区分两个不同的账户的。意思也就是后面我们比如clone的时候地址中git@A.github.com 通过config配置会转为git@github.com,也即Host最终会被转换为HostName的真实地址。当然以后我们从githubA clone代码下来的时候,也要把ssh地址中的git@github.com改为 git@A.github.com

—HostName 对应的就是真实的域名地址

测试:ssh -T git@A.github.com     ssh -T git@B.github.com   正常是都可以连接上了。

这样一台电脑使用同一平台下多个账户也可以了!


最后再说下网上我搜到的其他教程,很多都包含下面的步骤。但是经过我实测,这个添加私钥到agent并不是必须的。但是在这里还是记录一下相关的命令。

添加私钥

$ ssh-add ~/.ssh/id_rsa

$ ssh-add ~/.ssh/id_rsa_github

如果执行ssh-add时提示“Could not open a connection to your authentication agent”,可以现执行命令:

$ ssh-agent bash

然后再运行ssh-add命令。

# 可以通过 ssh-add -l 来确私钥列表

$ ssh-add -l

# 可以通过 ssh-add -D 来清空私钥列表

$ ssh-add -D

修改配置文件

 

后来我有找了关于ssh-agent 和ssh-add指令的描述:

—–ssh-agent 是用于管理SSH private keys, 长时间持续运行的守护进程(daemon. 唯一目的就是对解密的私钥进行高速缓存。

—–ssh-add 提示并将用户的使用的私钥添加到由ssh-agent 维护的列表中. 此后, 当使用公钥连接到远程 SSH SCP 主机时,不再提示相关信息.

         实际上看来这两条命令也就是把ssh的私钥进行缓存,所以并不是必须的,只是能加快和github或者oschina连接的速度而已!


        以上大部分是个人总结,如果错误的地方欢迎指正!反馈QQ:849664628    我会及时纠正

 

您可能还喜欢...

4 条回复

  1. guowei说道:

    相当精彩的博客,羡慕哦!

  2. 吊炸天说道:

    大神!受我一拜!

  3. keyun说道:

    一个博客能让人流连忘返,讲真,靠的是实力!

  4. yuantong说道:

    一个博客能让人流连忘返,讲真,靠的是实力!