引言
以前在的公司用的VisualStudio2015+svn来开发和管理代码,现在新公司要求使用IntellijIDEA+Git来开发和管理代码,然而这两款工具对我而言简直就是我知识的盲区呀!在配置git ssh key的过程中,入过多个坑,尤其是配置多个git服务器的ssh key,让我没少折腾,现在我把经验和过程记下来,一来是避免以后换系统需要重新配置忘了怎么操作,二来也为了把我跌过的坑跟大家分享一下!
本次记录:Win7 64位 系统
我按照多位前辈整理的管理配置git ssh key的各种资料,才发现,为什么我测试ssh -T git@github时能成功连上,而测试连接我们公司的服务器地址时,就是提示"ssh:connect to host XXXX port 22: Connecttion timed out",或者出现Permission denied (publickey)的问题,最后终于完美解决问题,下面跟大家分享一下我遇到的这些坑儿~
坑一:github/gitlab/公司自己搭建的gitlab服务,它们是不一样的
作为一个使用git的新手,我个人注册了一个git账号,用的是github来管理代码,而公司用的自己搭建的gitlab来管理代码。下面三张图分别是github.com,gitlab.com和自己公司的登录界面,
个人项目使用,github官方 gitlab官方,之前我误以为公司用的是这个 公司自己搭建的gitlab,是不是logo和gitlab官方的一样,所以我才误以为呀!之前我把ssh key的公钥复制,登录公司的gitlab服务器后,将它add 到了我的setting->SSH KEY中,同样也把公钥加到了我个人的github上,执行ssh -T git@github.com是可以连通的,但是用ssh --T git@公司服务器地址,怎么都不成功,原来是因为没有对git账号做多个ssh key的配置。用如何生成ssh key 完成了我的ssh key生成。按照网上的资料生成的应该就只有下图两个箭头指向的文件,
那么我这里的其他文件都是干嘛的?又是怎么来的呢?继续看下去~
坑二:使用全局的user也可以配置多个ssh key
之前我在想,既然要配置个人的github,又要配置公司的gitlab,网上说要取消全局user的配置,那我就取消吧,但是取消后又忘了怎么配置非全局user.name和user.email,没办法,就用全局的吧 git config --global user.name "zhangsan",git config --global user.email "zhangsan@163.com",配置好了过后,下面进入重点。
坑三:最好生成两个不同的ssh key
先看看.ssh文件夹里的这些文件都是干嘛用的,看图:
下面,先在.ssh文件夹里生成两个ssh key,名字分别叫id_rsa和id_rsa_github,具体实现可参照这位前辈的手法:同一个电脑多个ssh-key的管理(popfisher)生成之后相信你就可以看到下图红框中的四个文件,当然,如果你手速快,将两个公钥分别已经加到了你的账号中的SSH KEY中的话,并且测试连接过的话,那么就会有known_hosts文件。
以添加公司的SSH KEY为例,github.com和gitlab.com的和这个类似,找到SSH KEYS就好办了,见下图
看到这里或许你的ssh --T git@服务器地址 还是失败的,为什么呢?因为还没配置config呀!
坑四:config怎么生成,怎么配置,里面的内容都代表什么意思,我原来真的不懂
首先在git bash中,用命令:cd .ssh或者cd ~/.ssh(注意空格哈)进入到.ssh文件夹,用命令:touch config新建config文件,之前有前辈用vim config, 然后在git bash中编辑内容,但是用wq退不出来了,强行关闭后发现生成了一个.config.ssh的文件,编码格式也存在问题,所以我还是用的touch config,生成后,在.ssh文件夹中找到刚才生成的config文件,用记事本或者notepad++或者EditPlus文字编辑工具打开,下面看看我的config里有些啥,它们是什么东东?
当.ssh文件中有了这个手动添加的config文件后,git就会先去找这个config文件,根据里面的配置信息,去判断你用的哪个公钥去连接哪个git服务器。
坑五:部分服务器地址有特殊配置端口号的,一定不能忽略
提示Permission denied (publickey),大部分可能是把生成的公钥复制粘贴错了位置,比如你要测试github的连接,但是却把公钥粘贴到了gitlab上;还有可能就是你按照方法多次生成了默认的id_rsa和id_rsa.pub文件,没有把最新的公钥复制粘贴到个人账号的SSH KEYS中。
提示ssh:connect to host XXXX port 22: Connecttion timed out说明你的公钥位置没粘贴错,很大可能是.ssh中添加config文件中的配置不完善,比如我们公司的gitlab服务器地址中有配置端口号,而github.com不需要特别配置端口号,之前我就是忽略了端口号的配置,才让我折腾了好久好久,找各种原因,终于,在config中添加了一个Port 端口号,就解决问题了。
测试访问服务windowws下Git多账号配置命令小计
1.生成github.com对应的私钥公钥
ssh-keygen -t rsa -C 122799@qq.com 创建github对应的sshkey
2.生成config文件
cd ~/.ssh 在git bash中进入到.ssh的文件夹下,
touch config 创建config文件
3.测试连通服务
ssh -T git@github.com 测试连通服务地址
以上是个人在配置ssh key时遇到的问题和解决办法,因首次接触git,如有认知错误的地方,望看到的小伙伴指正一下,谢谢~
网友评论