ssh问题

作者: 星期六1111 | 来源:发表于2017-10-20 20:45 被阅读36次

    问题描述

    昨天晚上干了件极蠢的事,因为没有看提示,不小心覆盖了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.emailXX@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.comssh -T git@gitlab.dev看是否输出welcome的信息

    反思

    看提示!看提示!看提示!重要的事情说3遍!

    血淋淋的教训!在CI 上出现这样的失误真的很可怕

    相关文章

      网友评论

          本文标题:ssh问题

          本文链接:https://www.haomeiwen.com/subject/zjevuxtx.html