如何使用特定的SSH Key提交GIT

问题提出

最近在自己的MAC上面提交Github代码的时候发现居然失败了:

$ git push origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

这不是坑爹吗,Github都提交过无数次了,咋就失败了呢?莫非Github上的ssh key被删掉了么。于是打开github ssh,尝试再次把ssh key加上,却提示key已经存在了。于是赶紧回到本地repo查看下用户是不是对的:

$ git config -l
...
user.email=keysaim@gmail.com
user.name=keysaim

再查看下本地的ssh key:

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCu4Jy/+uFGiC89luBejzCEyPbY0SRoppyzrB4g1v3zv1OleylMzdf+eTTRcYgMbYoY6ZQs4M2NHX20iO6vf6j2uPvUsB++pP0G6Q7+VlrUlC19B07IVx7Mo2xmHCe4bMshFSugqOl+hV6zVjGpYJcLI9XtWQ6F/br4tkYD/J8KWns+SNha8gJVBckV1ncGlR+Q7ji4OM4+eIhKEEK4Wo7Cf7KaT71fIVFl7XRx5kmdtEN3F+wT4LjNb2okl8Pu4mmxCMwJvXzj0Jr9PkVzhSAhDkWG3mMt3kC5PhhRhCP7uwkGFsOEm5uGS907wTxY9cJNIl8FikOfmvDa5XrfMbMx nbaoping@xxx.com

发现邮件居然是nbaoping@xxx.com(此处已打码),显然跟本地repo的keysaim@gmail.com不同,git提交的时候没有特殊配置,会使用默认的ssh key,也就是~/.ssh/id_rsa.pub,而提交的用户信息跟此key并不能对应上,故此github拒绝了此次提交。既然如此,那把本地repo的用户信息改成key所对应的信息不就好了吗?是的,但是此信息都已经打码了就充分说明本博主是十分不愿暴露它的,咱必须得想其它辙。

好了,现在的问题就是,如何使用特定的ssh key提交Git?本文就来讲述一种通用的解决办法。

指定git提交使用的ssh key

  • 查看repo对应的hostname

    $ git remote -v
    origin  git@github.com:keysaim/keysaim.github.io.git (fetch)
    origin  git@github.com:keysaim/keysaim.github.io.git (push)
    

    其中github.com就是repo使用的hostname

  • 查看repo的用户信息

    $ git config -l
    ...
    user.email=keysaim@gmail.com
    user.name=keysaim
    

    最关键的是邮件信息keysaim@gmail.com。如果没有用户信息,可以先配置:

    $ git config user.email "keysaim@gmail.com"
    $ git config user.name "keysaim"
    

    注意,很多教程里面以及git的错误提示里面会建议在git config后面加入参数git config --global,这里,千万不要加入此参数,否则它会去尝试修改你的git的全局配置,也就是你所有repo默认的用户信息。你可以在文件~/.git/config查看你的全局配置,其中[user]段就是你的默认用户信息。咱们这里就是为了能够给这个repo指定特定的ssh key,显然不适合使用全局的配置。

  • 为repo的用户生成新的ssh key

    $ ssh-keygen -C "keysaim@gmail.com"
    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/nbaoping/.ssh/id_rsa): id_rsa.github
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in id_rsa.github.
    Your public key has been saved in id_rsa.github.pub.
    The key fingerprint is:
    SHA256:G0djI0bh+XwGcwOZ0AsbQ8ffB51pYrfSlRALNZw3igc keysaim@gmail.com
    The key's randomart image is:
    +---[RSA 2048]----+
    |       .==o+o=+.+|
    |       o+o=E.=+Oo|
    |        ==Bo*oB.+|
    |       ..*.B.=.o.|
    |        S + + .. |
    |         + o     |
    |        .        |
    |                 |
    |                 |
    +----[SHA256]-----+
    

    其中,-C是用来指定该key的用户信息的,这里咱们使用了keysaim@gmail.com。该命令是一个交互式的命令,其中大部分你都可以直接回车,但是对于第一个提示Enter file in which to save the key请务必输入你想要的文件名,否则它将覆盖你默认的ssh key,这个可是不可逆的。这里使用文件名id_rsa.github。如果没有指定文件夹在路径中,该命令会在当前目录下生成key文件:

    $ ls id_rsa.github*
    id_rsa.github  id_rsa.github.pub
    

    其中id_rsa.github是私钥,而id_rsa.github.pub为公钥。将key文件移到ssh目录下~/.ssh/

    $ mv id_rsa.github* ~/.ssh/
    
  • 配置ssh以使用新的key

    修改ssh的配置文件~/.ssh/config,加入如下配置:

    Host github.com
        HostName github.com
        User git
        IdentityFile /Users/nbaoping/.ssh/id_rsa.github
        IdentitiesOnly yes
    

    下面逐行解释:

    • Host github.com

      用来指定该key的Host名字,此处必须使用本地repo的hostname github.com

    • Hostname github.com

      此处指定Host对应的具体域名,这里跟Host保持一致。(HostHostname可以不一致,但是Host必须跟repo的hostname保持一致,也就是git到时候会用自己repo的hostname来ssh配置文件里面找是不是有对应的Host,找到了就使用该配置,具体访问的域名会采用HostName

    • User git

      说明该配置的用户得是git

    • IdentityFile /Users/nbaoping/.ssh/id_rsa.github

      这行最为关键,指定了该使用哪个ssh key文件,这里的key文件一定指的是私钥文件。之前我们生成了新的私钥文件~/.ssh/id_rsa.github,由于博主使用的是MAC,~被翻译成/Users/nbaoping/了,如果是在一般的Linux环境下,改路径前缀该是/home/nbaoping/

    • IdentitiesOnly yes

      请配置为yes,具体意义可以参考讨论

  • 将生成的ssh key加入github

    打开github ssh key配置页面,点击New SSH Key,给刚刚生成的key取名,如keysaim-mac。把~/.ssh/id_rsa.github.pub(请务必注意是公钥文件,千万不要搞错了)里面的内容拷贝过来,点击Add SSH Key按钮保持。

  • 提交

    做完上面的步骤之后,就可以提交了:

    $ git push origin master
    Counting objects: 63, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (62/62), done.
    Writing objects: 100% (63/63), 838.96 KiB | 0 bytes/s, done.
    Total 63 (delta 2), reused 0 (delta 0)
    remote: Resolving deltas: 100% (2/2), done.
    To github.com:keysaim/keysaim.github.io.git
       73a2043..88cacc1  master -> master
    

    可以看到,这次提交成功了。

结语

当你需要把某些repo以不同的用户提交的时候,可以按照本文给他们配置特殊的ssh key,但是注意的一点就是,这种配置事基于Host,也就是repo的hostname,如果需要确保不同的repo使用不同的ssh key,需要每个repo使用不同的hostname。

本文也可以在博主个人博客中查看

参考

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

推荐阅读更多精彩内容