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

問題提出

最近在自己的MAC上面提交Github代碼的時(shí)候發(fā)現(xiàn)居然失敗了:

$ 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都提交過無數(shù)次了之宿,咋就失敗了呢腐巢?莫非Github上的ssh key被刪掉了么左冬。于是打開github ssh斤彼,嘗試再次把ssh key加上,卻提示key已經(jīng)存在了展鸡。于是趕緊回到本地repo查看下用戶是不是對(duì)的:

$ 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

發(fā)現(xiàn)郵件居然是nbaoping@xxx.com(此處已打碼)屿衅,顯然跟本地repo的keysaim@gmail.com不同,git提交的時(shí)候沒有特殊配置莹弊,會(huì)使用默認(rèn)的ssh key涤久,也就是~/.ssh/id_rsa.pub涡尘,而提交的用戶信息跟此key并不能對(duì)應(yīng)上,故此github拒絕了此次提交响迂。既然如此考抄,那把本地repo的用戶信息改成key所對(duì)應(yīng)的信息不就好了嗎?是的蔗彤,但是此信息都已經(jīng)打碼了就充分說明本博主是十分不愿暴露它的川梅,咱必須得想其它轍。

好了然遏,現(xiàn)在的問題就是贫途,如何使用特定的ssh key提交Git?本文就來講述一種通用的解決辦法待侵。

指定git提交使用的ssh key

  • 查看repo對(duì)應(yīng)的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
    

    最關(guān)鍵的是郵件信息keysaim@gmail.com。如果沒有用戶信息秧倾,可以先配置:

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

    注意怨酝,很多教程里面以及git的錯(cuò)誤提示里面會(huì)建議在git config后面加入?yún)?shù)git config --global,這里那先,千萬不要加入此參數(shù)农猬,否則它會(huì)去嘗試修改你的git的全局配置,也就是你所有repo默認(rèn)的用戶信息售淡。你可以在文件~/.git/config查看你的全局配置斤葱,其中[user]段就是你的默認(rèn)用戶信息。咱們這里就是為了能夠給這個(gè)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。該命令是一個(gè)交互式的命令惯驼,其中大部分你都可以直接回車蹲嚣,但是對(duì)于第一個(gè)提示Enter file in which to save the key請務(wù)必輸入你想要的文件名祟牲,否則它將覆蓋你默認(rèn)的ssh key隙畜,這個(gè)可是不可逆的。這里使用文件名id_rsa.github说贝。如果沒有指定文件夾在路徑中议惰,該命令會(huì)在當(dāng)前目錄下生成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對(duì)應(yīng)的具體域名运杭,這里跟Host保持一致夫啊。(HostHostname可以不一致,但是Host必須跟repo的hostname保持一致辆憔,也就是git到時(shí)候會(huì)用自己repo的hostname來ssh配置文件里面找是不是有對(duì)應(yīng)的Host撇眯,找到了就使用該配置,具體訪問的域名會(huì)采用HostName

    • User git

      說明該配置的用戶得是git

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

      這行最為關(guān)鍵虱咧,指定了該使用哪個(gè)ssh key文件熊榛,這里的key文件一定指的是私鑰文件。之前我們生成了新的私鑰文件~/.ssh/id_rsa.github腕巡,由于博主使用的是MAC来候,~被翻譯成/Users/nbaoping/了,如果是在一般的Linux環(huán)境下逸雹,改路徑前綴該是/home/nbaoping/营搅。

    • IdentitiesOnly yes

      請配置為yes,具體意義可以參考討論梆砸。

  • 將生成的ssh key加入github

    打開github ssh key配置頁面转质,點(diǎn)擊New SSH Key,給剛剛生成的key取名帖世,如keysaim-mac休蟹。把~/.ssh/id_rsa.github.pub(請務(wù)必注意是公鑰文件,千萬不要搞錯(cuò)了)里面的內(nèi)容拷貝過來日矫,點(diǎn)擊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
    

    可以看到哪轿,這次提交成功了盈魁。

結(jié)語

當(dāng)你需要把某些repo以不同的用戶提交的時(shí)候,可以按照本文給他們配置特殊的ssh key窃诉,但是注意的一點(diǎn)就是杨耙,這種配置事基于Host,也就是repo的hostname飘痛,如果需要確保不同的repo使用不同的ssh key珊膜,需要每個(gè)repo使用不同的hostname。

本文也可以在博主個(gè)人博客中查看宣脉。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末车柠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竹祷,老刑警劉巖介蛉,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異溶褪,居然都是意外死亡币旧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門猿妈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吹菱,“玉大人,你說我怎么就攤上這事彭则△⑺ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵俯抖,是天一觀的道長输瓜。 經(jīng)常有香客問我,道長芬萍,這世上最難降的妖魔是什么尤揣? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮柬祠,結(jié)果婚禮上北戏,老公的妹妹穿的比我還像新娘。我一直安慰自己漫蛔,他們只是感情好嗜愈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著莽龟,像睡著了一般蠕嫁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毯盈,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天剃毒,我揣著相機(jī)與錄音,去河邊找鬼奶镶。 笑死迟赃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厂镇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼左刽,長吁一口氣:“原來是場噩夢啊……” “哼捺信!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤迄靠,失蹤者是張志新(化名)和其女友劉穎秒咨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掌挚,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雨席,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吠式。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陡厘。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖特占,靈堂內(nèi)的尸體忽然破棺而出糙置,到底是詐尸還是另有隱情,我是刑警寧澤是目,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布谤饭,位于F島的核電站,受9級(jí)特大地震影響懊纳,放射性物質(zhì)發(fā)生泄漏揉抵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一嗤疯、第九天 我趴在偏房一處隱蔽的房頂上張望功舀。 院中可真熱鬧,春花似錦身弊、人聲如沸辟汰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帖汞。三九已至,卻和暖如春凑术,著一層夾襖步出監(jiān)牢的瞬間翩蘸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工淮逊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留催首,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓泄鹏,卻偏偏與公主長得像郎任,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子备籽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容