Git的多SSH Key解决方案(macOS)

背景

公司最近将代码由svn迁移到了gitlab来托管,我个人平时也经常使用Github,可是公司邮箱与我的Github使用的邮箱是不同的,SSH Key是由邮箱来生成的,这样子就造成了冲突,本文记录了解决此类问题的方案。

解决方案

使用 git config工具,对不同的域名采用不同的认证密钥。

  1. git config介绍

    Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

    • /etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用git config时用--system` 选项,读写的就是这个文件。
    • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
    • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

    由于经常使用GitHub看一些开源项目,相对公司的GitLab项目来说还是多一些的,所以将GitHub的配置到~/.gitconfig 文件,将公司项目配置到各自的项目工作目录。

  2. 配置用户名、邮箱

  • GitHub配置
    $ git config --global user.name "zhouyang-cn"
    $ git config --global user.email "lyzhou1107@163.com"
    
  • GitLab配置
    进入项目的根目录
    $ git config user.name "zhouyang"
    $ git config user.email "zhouyang@xxx.com"
    
  1. 生成SSH Key

mac上SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。

$ cd ~/.ssh
$ ls
id_dsa d_dsa.pub known_hosts

关键是看有没有用 somethingsomething.pub 来命名的一对文件,这个 something 通常就是 id_dsaid_rsa。有 .pub 后缀的文件就是公钥,另一个文件则是密钥。假如没有这些文件,或者干脆连 .ssh 目录都没有,可以用 ssh-keygen 来创建。

localhost:~ zhouyang$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/zhouyang/.ssh/id_rsa): 直接敲enter键
Enter passphrase (empty for no passphrase): 直接敲enter键
Enter same passphrase again: 直接敲enter键
Your identification has been saved in /Users/zhouyang/.ssh/id_rsa.
Your public key has been saved in /Users/zhouyang/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:bg5l5i95JIYr9ovvWbPPlAaa2kGljKcBJuu16YTbqBw zhouyang@localhost
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|. o     .        |
| + . o o         |
|.  .o =.S        |
|. o o=.Oo...     |
| E +. =o*++      |
|. B o+.BoB.      |
|o+ +o=B.o++      |
+----[SHA256]-----+

通过上面的操作会在账户的主目录下生成 ~/.ssh 目录,并在目录内生成id_rsa(私钥,切记不要泄露)和id_rsa.pub(公钥)文件。

  • 生成GitHub的SSH公钥

    ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "lyzhou1107@163.com"
    
  • 生成GitLib的SSH公钥

    ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitlab -C "zhouyang@xxx.com"
    

命令执行完成后,这时~/.ssh目录下会多出id_rsa.github.pubid_rsa.gitlab.pub文件就是给github和gitlab使用的公钥。

  1. 配置config文件

通过touch ~/.ssh/config命令创建config文件,修改文件内容如下:

#
# github
#
Host github.com
IdentityFile ~/.ssh/id_rsa_github

#
# company gitlab
#
Host git.company.com
IdentityFile ~/.ssh/id_rsa_gitlab

配置完成以后,github的仓库会使用~/.ssh/id_rsa_github密钥进行验证,gitlab会使用~/.ssh/id_rsa_gitlab密钥进行验证。

  1. 设置github和gitlab公钥

    以github为例:

    1. 登录https://github.com/
    2. 点击右上角个人头像图标,然后点击Settings选项
    3. 选择SSH and GPG keys选项,然后点击右上角New SSH key按钮
    4. Title填上自定义的名字方便区分即可,然后打开~/.ssh/id_rsa_github.pub文件,将文件的所有内容copy粘贴到key对应的文本域即可

    由于每个公司的gitlab菜单项可能不一样就不举例子了。

  2. 验证SSH连接

    打开Terminal,输入一下命令来校验:

    ssh -T git@github.com
    

    若看到如下信息,则代表连接成功了:

    Hi zhouyang-cn! You've successfully authenticated, but GitHub does not provide shell access.
    

    若出现问题,可以参考github的文档

在AS中的Problems and solutions

​ 经过上面的配置后,在as里进行代码修改、commit和push操作时,会出现push失败的问题,错误信息如下:

Failed with error: fatal: Could not read from remote repository

通过google搜索后找出问题产生的原因:

由于AS默认使用的是Built-in(自带的)进行SSH校验,而我们上面设置的是mac本机的SSH校验。所以解决方案如下:

相关文档:stackoverflow

扩展知识

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容