GitHub 權限校驗失敗給我的啟發(fā)

背景描述

眾所周知,在GitHub中就珠,每個倉庫都有兩個地址蛉威,分別基于HTTPS協議和SSH協議仿荆,兩個協議對應的URL地址(repository_url)形式如下所示:

# HTTPS
https://github.com/DJIXY/MobileStore.git
# SSH
git@github.com:DJIXY/MobileStore.git

正常情況下臊泌,只要在本地正確地配置好了git賬號鲤桥,采用這兩個地址中的任意一個,都可以通過git clone repository_url獲取代碼渠概。

但最近我在Macbook Air中clone公司托管在GitHub私有庫中的代碼時茶凳,發(fā)現無法通過HTTPS協議的地址clone代碼,始終提示remote: Repository not found.的錯誤播揪。

? git clone https://github.com/DJIXY/MobileStore.git
Cloning into 'MobileStore'...
remote: Repository not found.
fatal: repository 'https://github.com/DJIXY/MobileStore.git/' not found

首先贮喧,這個代碼倉庫是確實存在的,而且地址肯定也是沒有問題的剪芍,通過URL地址也能在瀏覽器中訪問到對應的GitHub倉庫頁面塞淹。

其次,在本地對git的配置也是沒有問題的罪裹,通過SSH協議的地址是可以正常clone代碼的饱普。

? git clone git@github.com:DJIXY/MobileStore.git
Cloning into 'MobileStore'...
Warning: Permanently added the RSA host key for IP address '192.30.252.131' to the list of known hosts.
remote: Counting objects: 355, done.
remote: Compressing objects: 100% (3/3), done.

并且,如果在HTTPS協議的URL地址中加上GitHub賬號状共,也是可以正常clone代碼的套耕。

? git clone https://djileolee@github.com/DJIXY/MobileStore.git
Cloning into 'MobileStore'...
remote: Counting objects: 355, done.
remote: Compressing objects: 100% (3/3), done.

更奇怪的是,在我的另一臺Mac Mini中峡继,采用同樣的賬號配置冯袍,兩種協議的URL地址卻都能正常clone代碼,仔細地對比了兩臺電腦的git配置碾牌,都是一樣的康愤。

? cat ~/.git-credentials
https://djileolee:340d247cxxxxxxxxf39556e38fe2b0baxxxxxxxx@github.com
?
? cat ~/.gitconfig
[credential]
    helper = store

那問題出在哪兒呢?

定位分析

通過Google得知舶吗,產生remote: Repository not found.報錯的原因主要有兩個征冷,一是倉庫地址錯誤,二是權限校驗不通過誓琼。顯然检激,第一個原因可以直接排除,在Macbook Air中出現該問題應該就是賬號權限校驗失敗造成的腹侣。

對背景描述中的現象進行整理叔收,重點關注兩個疑點:

  • 通過HTTPS協議的URL地址進行git clone時,系統(tǒng)沒有提示讓輸入用戶名密碼傲隶,就直接返回權限校驗失敗的異常饺律;
  • HTTPS協議的URL地址中加上GitHub用戶名,就可以正常clone伦籍,而且蓝晒,系統(tǒng)也沒有提示輸入密碼腮出。

這說明,在系統(tǒng)中的某個地方芝薇,應該是保存了GitHub賬號密碼的胚嘲,所以在未指定賬號的情況下,git clone時系統(tǒng)就不再要求用戶輸入賬號密碼洛二,而是直接讀取那個保存好的賬號信息馋劈;但是,那個保存的GitHub賬號密碼應該是存在問題的晾嘶,這就造成采用那個賬號信息去GitHub校驗時無法通過妓雾,從而返回異常報錯。

基于以上推測垒迂,尋找問題根源的當務之急是找到保存GitHub賬號密碼的地方械姻。

通過查看Git官方文檔,存儲Git用戶信息的地方有三個:

  • /etc/gitconfig:存儲當前系統(tǒng)所有用戶的git配置信息机断;
  • ~/.gitconfig~/.config/git/config:存儲當前用戶的git配置信息楷拳;
  • 倉庫的Git目錄中的config文件(即repo/.git/config):存儲當前倉庫的git配置信息。

這三個配置項的優(yōu)先級從上往下依次上升吏奸,即repo/.git/config會覆蓋~/.gitconfig中的配置欢揖,~/.gitconfig會覆蓋/etc/gitconfig中的配置。

回到當前問題奋蔚,由于還沒有進入到具體的Git倉庫她混,因此repo/.git/config可直接排除;然后是查看當前用戶的git配置泊碑,在當前用戶HOME目錄下沒有~/.config/git/config文件坤按,只有~/.gitconfig,不過在~/.gitconfig中并沒有賬號信息馒过;再去查看系統(tǒng)級的git配置信息晋涣,即/etc/gitconfig文件,但發(fā)現當前系統(tǒng)中并沒有該文件沉桌。

找遍了Git用戶信息可能存儲的地方,都沒有看到賬號配置信息算吩,那還可能存儲在哪兒呢留凭?

這時基本上是毫無思路了,只能靠各種胡亂猜測偎巢,甚至嘗試采用Wireshark分別在兩臺Mac上對git clone的過程進行抓包蔼夜,對比通訊數據的差異,但都沒有找到答案压昼。

最后求冷,無意中想到了Mac的Keychain機制瘤运。在Mac OSX的Keychain中,可以保存用戶的賬號密碼等credentials匠题,那git賬號會不會也保存到Keychain中了呢拯坟?

在Macbook Air中打開Keychain Access應用軟件,搜索github韭山,果然發(fā)現存在記錄郁季。

而且,github.com這一項還存在兩條記錄钱磅。一條是我的個人賬號debugtalk梦裂,另一條是公司的工作賬號djileolee

至此盖淡,真相大白D昴!褪迟!

在我的Macbook Air中冗恨,Keychain Access中保存了我的GitHub個人賬號(debugtalk),該賬號是沒有權限訪問公司私有倉庫的牵咙。但是在Terminal中執(zhí)行git clone命令時派近,系統(tǒng)優(yōu)先讀取了我的個人賬號,并用該賬號向GitHub發(fā)起校驗請求洁桌,從而造成讀取公司私有倉庫時權限校驗失敗渴丸。然而,在HTTPS協議的URL地址中加上GitHub工作賬號(djileolee)時另凌,由于此時指定了賬號名稱谱轨,因此在Keychain中讀取賬號信息時就可以找到對應賬號(包含密碼),并且在無需輸入密碼的情況下就能成功通過GitHub的權限校驗吠谢,進而成功clone得到代碼土童。

原因弄清楚之后,解決方式就很簡單了工坊,在Keychain中刪除個人賬號献汗,然后就正常了。

總結回顧

但是王污,問題真的解決了么罢吃?

并沒有!

簡單粗暴地在Keychain中將個人GitHub賬號刪除了昭齐,雖然再次訪問公司代碼倉庫時正常了尿招,那我要再訪問個人倉庫時該怎么辦呢?

貌似并沒有清晰的思路。雖然網上也有不少操作指導教程就谜,但是對于操作背后的原理怪蔑,還是有很多不清晰的地方。

再回到前面的背景描述丧荐,以及定位問題的整個過程缆瓣,不由地悲從中來。使用GitHub好歹也有好幾年了篮奄,但是連最基本的概念都還一頭霧水捆愁,所以遇到問題后只能靠瞎猜,東碰西撞窟却,最后瞎貓碰到死耗子昼丑。

GitHub的HTTPS協議和SSH協議,這本來就對應著兩套完全獨立的權限校驗方式夸赫,而我在HTTPS協議不正常的情況下還去查看SSH協議菩帝,這本來就實屬多余。

借助這次“掉坑”的經歷茬腿,我對Git權限校驗的兩種方式重頭進行了梳理呼奢,并單獨寫了一篇博客,《深入淺出Git權限校驗》切平,雖然花了些時間握础,但總算是掃清了縈繞多年的迷霧,感覺倍兒爽悴品!

如果你也對Git的權限校驗沒有清晰的了解禀综,遇到權限校驗出錯時只能“換一種方法試試”,也不知道怎么讓一臺計算機同時支持多個GitHub賬號苔严,那么也推薦看下那篇博客定枷。


Read More ...

公眾號:DebugTalk
原文鏈接:http://debugtalk.com/post/trap-in-GitHub-authority-verification
在微信公眾號debugtalk中輸入Git權限校驗,獲取《深入淺出Git權限校驗》届氢。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末欠窒,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子退子,更是在濱河造成了極大的恐慌岖妄,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寂祥,死亡現場離奇詭異衣吠,居然都是意外死亡,警方通過查閱死者的電腦和手機壤靶,發(fā)現死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惊搏,“玉大人贮乳,你說我怎么就攤上這事忧换。” “怎么了向拆?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵亚茬,是天一觀的道長。 經常有香客問我浓恳,道長刹缝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任颈将,我火速辦了婚禮梢夯,結果婚禮上,老公的妹妹穿的比我還像新娘晴圾。我一直安慰自己颂砸,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布死姚。 她就那樣靜靜地躺著人乓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪都毒。 梳的紋絲不亂的頭發(fā)上色罚,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音账劲,去河邊找鬼戳护。 笑死,一個胖子當著我的面吹牛涤垫,可吹牛的內容都是我干的姑尺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蝠猬,長吁一口氣:“原來是場噩夢啊……” “哼切蟋!你這毒婦竟也來了?” 一聲冷哼從身側響起榆芦,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤柄粹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匆绣,有當地人在樹林里發(fā)現了一具尸體驻右,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年崎淳,在試婚紗的時候發(fā)現自己被綠了堪夭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖森爽,靈堂內的尸體忽然破棺而出恨豁,到底是詐尸還是另有隱情,我是刑警寧澤爬迟,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布饱苟,位于F島的核電站街夭,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜砰琢,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一腋妙、第九天 我趴在偏房一處隱蔽的房頂上張望枝缔。 院中可真熱鬧偷卧,春花似錦、人聲如沸活箕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽育韩。三九已至克蚂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間筋讨,已是汗流浹背埃叭。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悉罕,地道東北人赤屋。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像壁袄,于是被迫代替她去往敵國和親类早。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容