ssh问题
2017-10-20 本文已影响36人
星期六1111
问题描述
昨天晚上干了件极蠢的事,因为没有看提示,不小心覆盖了ci上默认的.ssh下的私钥
矛盾点
覆盖原来的私钥之后,之前的一些ssh的配置应该会失效,但出人意料的发现,我再次覆盖私钥后,生成的公钥和之前的公钥是一样的。。。理论上,生成的公钥和私钥是配对的,当生成新的私钥时,公钥会改变才对,但事实上却不是这样
问题解决
Q1:为什么覆盖会生成一样的public key?
A1:因为我实现进行了git config --global user.name 'XX' && git config --global user.email 'XX@qq.com'
的配置,由于邮箱是识别的唯一手段,那么自然的,这两者采用同一个邮箱,生成的 public key 也会是同一个。所以,原因就是因为我配置的时候采用相同的邮箱。
Q2: 本来需要做的是多个ssh key的管理,结果失误了,一路回车,正确应该怎么样做呢?
A2:由于采用了不同的邮箱,对不同的服务商进行提交,所以此时我们经常配置的 git config --global 就不能常用了,必须在每个仓库的目录下进行配置自己的用户名、邮箱。基于config文件,原理上就是对 SSH 协议配置 config 文件,对不同的域名采用不同的认证密钥。
正确的做法:
- 全局配置,Github仓库中默认使用此配置
git config --global user.name 'XX' && git config --global user.email ‘XX@gmail.com'
团队项目配置,每次新创建一个项目,需要执行下
git config --local user.name 'XX' && git config --local user.email 'XX@ff.com' - ssh key 默认生成后保存在 ~/.ssh/目录下 ,默认为 id_rsa 和 id_rsa.pub 两个文件,由于我们需要分开配置,所以这么做:
生成公钥、密钥的同时指定文件名,Gitlab使用
ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitlab -C "XX@ff.com"
生成默认,Github使用
ssh-keygen -t rsa -C "XX@gmail.com" - 配置 config 文件
在 ~/.ssh目录下,如果不存在,则新建 touch ~/.ssh/config文件 ,文件内容添加如下:
Host *.ff.com
IdentityFile ~/.ssh/id_rsa.gitlab
User XX
配置完成后,符合 *.ff.com后缀的 Git 仓库,均采取~/.ssh/id_rsa.gitlab 密钥进行验证,其它的采取默认的。
将两个公钥分别上传至github和gitlab - 测试
分别输入ssh -T git@github.com
和ssh -T git@gitlab.dev
看是否输出welcome的信息
反思
看提示!看提示!看提示!重要的事情说3遍!
血淋淋的教训!在CI 上出现这样的失误真的很可怕