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 我会及时纠正
相当精彩的博客,羡慕哦!
大神!受我一拜!
一个博客能让人流连忘返,讲真,靠的是实力!
一个博客能让人流连忘返,讲真,靠的是实力!