簡(jiǎn)介
最近在更新github文件的時(shí)候份名,突然說(shuō)不讓更新了舞蔽,讓我很是困惑芥驳,原因是在2021年8月13號(hào)之后,github已經(jīng)不讓直接使用賬號(hào)名密碼來(lái)登錄了谭期,必須使用personal access token堵第。今天給大家講解一下怎么對(duì)這個(gè)token進(jìn)行緩存。
背景介紹
github為了安全性考慮崇堵,在2020年7月就準(zhǔn)備對(duì)所有需要使用身份認(rèn)證的git命令切換成基于令牌的身份驗(yàn)證型诚。并且從2021年8月13日開(kāi)始,在 GitHub.com上對(duì)Git操作進(jìn)行身份驗(yàn)證時(shí)將不再接受帳戶密碼鸳劳。
這個(gè)改動(dòng)只對(duì)使用用戶名密碼進(jìn)行g(shù)ithub交互的用戶受影響狰贯。如果你使用的是SSH,或者之前就使用的是令牌,或者使用的是GitHub Desktop涵紊,那么不會(huì)有任何影響傍妒。
github做出這個(gè)決定主要是對(duì)于安全的考慮,明文的密碼很容易被泄露摸柄,如果換成有時(shí)限的token颤练,即使泄露了影響也會(huì)非常有限。
并且可以為同一個(gè)github賬號(hào)根據(jù)不同的使用途徑驱负,生成不同的token嗦玖,并且隨時(shí)都可以控制token的有效狀態(tài)和不同token代表的權(quán)限。最大限度的保證賬號(hào)的安全性跃脊。
生成的token可隨時(shí)撤銷宇挫,并且令牌的隨機(jī)性更高,不容易被暴力破解酪术。
創(chuàng)建令牌
令牌器瘪,英文名叫做token,個(gè)人訪問(wèn)令牌英文簡(jiǎn)寫(xiě)為PAT绘雁。它是一種使用密碼對(duì) GitHub 進(jìn)行身份驗(yàn)證的替代方法橡疼。
你可以將token看做是密碼,不過(guò)這個(gè)token具有權(quán)限和有效時(shí)間的限制庐舟。同時(shí)為了安全起見(jiàn)欣除,GitHub 會(huì)自動(dòng)刪除一年內(nèi)未使用的個(gè)人訪問(wèn)令牌。 為了保證令牌的安全性继阻,我們強(qiáng)烈建議為個(gè)人訪問(wèn)令牌添加過(guò)期時(shí)間耻涛。
要使用令牌首先需要?jiǎng)?chuàng)建令牌。怎么創(chuàng)建令牌呢瘟檩?
首先登錄github.com,在我的賬號(hào)下方抹缕,選擇settings:
然后在左側(cè)邊欄中,點(diǎn)擊開(kāi)發(fā)人員設(shè)置:
然后選擇左邊的個(gè)人訪問(wèn)令牌:
點(diǎn)擊生成令牌按鈕墨辛,就可以生成令牌了卓研。
在創(chuàng)建過(guò)程中,我們需要輸入和選擇一些數(shù)據(jù):
比如我們需要給這個(gè)token起個(gè)名字睹簇,用來(lái)區(qū)分不同的使用場(chǎng)景奏赘,還要選擇一個(gè)過(guò)期時(shí)間,為了安全起見(jiàn)太惠,這個(gè)過(guò)期時(shí)間不要太長(zhǎng)磨淌。
最后,就是token對(duì)應(yīng)的權(quán)限了凿渊,如果你只是對(duì)repository進(jìn)行操作梁只,選擇repo即可缚柳。
這樣一個(gè)令牌就創(chuàng)建好了。
注意搪锣,創(chuàng)建好的令牌需要及時(shí)保存秋忙,因?yàn)楹罄m(xù)也不能再?gòu)木W(wǎng)頁(yè)上查看該令牌的內(nèi)容。令牌的保存需要和密碼的保存一樣注意安全构舟。
使用令牌
上面我們提到了灰追,令牌就相當(dāng)于密碼,比如我們?cè)诳截愐粋€(gè)需要密碼的repository使用輸入你的用戶名和token就可以正常操作了狗超。
$ git clone https://github.com/username/repo.git
Username: your_username
Password: your_token
但是如果每次都需要輸入密碼就太麻煩了弹澎。下面講解一下怎么在git中緩存令牌。事實(shí)上令牌跟密碼是等價(jià)的抡谐,在git中緩存密碼的方式同樣適用于緩存令牌裁奇。
緩存令牌
通過(guò)設(shè)置credential.helper的緩存方式桐猬,可以對(duì)密碼進(jìn)行緩存麦撵。
通常來(lái)說(shuō)有兩種方式,一種是cache溃肪,一種是store免胃。
cache是將密碼放在內(nèi)存中一段時(shí)間,密碼不會(huì)存放在磁盤(pán)中惫撰,過(guò)一段時(shí)間會(huì)自動(dòng)從內(nèi)存中清除羔沙。
通過(guò)使用下面的命令,可以開(kāi)啟cache:
git config --global credential.helper cache
對(duì)于store來(lái)說(shuō)厨钻,它接收一個(gè)文件的路徑扼雏,用來(lái)存儲(chǔ)密碼文件。默認(rèn)存放的路徑是~/.git-credentials夯膀,可以通過(guò)指定--file來(lái)修改:
git config --global credential.helper 'store --file /data/git/.git-credentials'
如果你使用的mac系統(tǒng)诗充,mac提供了一個(gè)osxkeychain的東西,可以將密碼存儲(chǔ)到你的系統(tǒng)用戶的鑰匙串中诱建。這種方式更加優(yōu)雅蝴蜓,首先密碼是加密保存的,另外其管理起來(lái)也非常方便俺猿,還有可視化的界面茎匠。
當(dāng)然你也可以從命令行將github的存儲(chǔ)密碼進(jìn)行刪除:
$ git credential-osxkeychain erase
host=github.com
protocol=https
> [Press Return]
如果你在windows機(jī)子上,那么可以安裝一個(gè)叫做““Git Credential Manager for Windows”的工具押袍,它是一個(gè)和osxkeychain類似的東西诵冒。
使用GCM
上面介紹的存儲(chǔ)方法都已經(jīng)過(guò)時(shí)了,現(xiàn)在github推薦使用Git Credential Manager Core (GCM Core) 來(lái)對(duì)你的客戶端憑證進(jìn)行管理谊惭。
通過(guò)使用GCM Core汽馋,根本不需要?jiǎng)?chuàng)建和儲(chǔ)存PAT否过,全部都有GCM Core來(lái)代表你進(jìn)行管理。
怎么安裝GCM呢惭蟋?下面是在mac上安裝的過(guò)程:
首先安裝git:
brew install git
然后安裝GCM Core:
$ brew tap microsoft/git
$ brew install --cask git-credential-manager-core
在下次你clone需要使用身份驗(yàn)證的HTTPS URL時(shí)苗桂,Git將會(huì)提示你使用瀏覽器窗口登錄,通過(guò)授權(quán)OAuth應(yīng)用程序告组,實(shí)現(xiàn)GCM Core對(duì)憑證的管理功能煤伟。
成功通過(guò)身份驗(yàn)證后,你的憑據(jù)將存儲(chǔ)在macOS鑰匙串中木缝,并且每次克隆HTTPS URL時(shí)都會(huì)使用鑰匙串中的憑證便锨。 Git不會(huì)要求你再次在命令行中鍵入憑據(jù),除非你更改憑據(jù)我碟。
GCM Core同樣可以在windows和linux環(huán)境下使用放案。
總結(jié)
通過(guò)生成新的token,并更換現(xiàn)有的緩存密碼矫俺,最終我的github又可以重新提交了吱殉,贊!
本文已收錄于 http://www.flydean.com/05-git-personal-access-token/
最通俗的解讀厘托,最深刻的干貨友雳,最簡(jiǎn)潔的教程,眾多你不知道的小技巧等你來(lái)發(fā)現(xiàn)铅匹!
歡迎關(guān)注我的公眾號(hào):「程序那些事」,懂技術(shù)押赊,更懂你!