【學了就忘】GitHub — 70.配置Git免密登陸GitHub

1、爲什麼要配置Git免密登陸

在使用Git的過程中,每次向GitHub倉庫推送代碼,或者從GitHub上拉取數據的時候,都要輸入Git的賬號與密碼,進行身份驗證纔可訪問,非常麻煩。那麼如何才能避免每次推送代碼都要輸入賬號密碼呢?

我們要設置Git免密登錄,使Git本地版本庫可以免密登錄並訪問GitHub,也就是配置SSHKey。

即:因爲我們是要把Git版本庫中的代碼推送到GitHub上,GitHub上需要對我們版本庫進行驗證,所以要輸入Git的用戶名和密碼。

2、免密登錄原理

(1)兔密登錄機制

Git主機間的通信採用的是SSH協議,即Sercure Shell協議。

該協議的兔密登錄機制,要求主機之間採用SSH-key,即SSH密鑰的方式進行身份驗證。

SSH密鑰包含“公鑰與私鑰",所以我們首先要了解什麼是“公鑰與私鑰”,然後還要理解“公鑰與私鑰”在免密登錄中的作用,即免密登錄的工作原理。

(2)公鑰與私鑰
對於公鑰與私鑰,要了解以下三點:

  1. “公鑰與私鑰加密”是一種“不對稱的加密方式”,是傳統“對稱加密方式”功能的增強。
  2. 公鑰與私鑰是成對的,即一個公鑰對應一個私鑰。使用公鑰加密後,只能使用私鑰進行解密。
  3. 公鑰與私鑰的關係:就好比“鎖與鑰匙”的關係。公鑰相當於“鎖”,鎖是可以被他人看到的,是要發送給別人的,所以稱爲公鑰。私鑰相當於“鑰匙”,它是不能公開的,只能有公鑰發出者保存。

(3)免密碼登錄的工作原理

對於免密登錄的機制,主要由兩部分構成:構建與驗證。

  • 免密登錄構建:
    Git版本庫所在的主機上生成一對密鑰:公鑰與私鑰,保存到本地主機中。
    Git版本庫將公鑰及用戶信息(用戶名,密碼等)保存到GitHub上。

  • 免密登錄驗證:
    1、Git版本庫向GitHub發送連接請求,包含Git版本庫的用戶信息。
    2、GitHub從本地文件中查找是否存連接中包含的用戶信息。若不存在:則拒絕訪問,若存在:可以訪問。
    3、GitHub將加密後的隨機字符串,發送給Git版本庫。
    4、Git版本庫將加密後的隨機字符串,使用私鑰進行解密。
    5、Git版本庫解密後的字符發送給GitHub。
    6、GitHub將接收到的字符串,與本地未加密的字符串進行比較,相同則可以訪問,不同則被拒絕。

免密登錄原理示意圖:

簡單的理解:

SSH Key也可以簡單的理解爲你的身份標識,放在GitHub上面標明你是這個項目的一個開發人員,但是別人可以截獲,但是你本機上的私鑰無法截獲,SSH Key也就保證了每次傳輸是安全的。

3、設置本地庫對GitHub的免密登錄

此時我們要設置Git本地庫對GitHub的免密登錄,密鑰對應由本地版本庫主機生成,而GitHub中只需要保存公鑰即可。

(1)在本地版本庫主機中生成SSHkey密鑰

1)生成密鑰

進入Git bash客戶端,執行命令ssh-keygen -t rsa -C "郵箱地址",來生成SSHkey密鑰。

ssh-keygen命令常用參數:

  • -t:指定生成密鑰的類型,默認使用RSA類型密鑰。
  • -f:指定生成密鑰的文件名,默認id_rsa(私鑰id_rsa,公鑰id_rsa.pub
  • -P:提供舊密碼,空表示不需要密碼(-P ' ')。
  • -N:提供新密碼,空表示不需要密碼(-N ' ')。
  • -C:提供一個新註釋,比如郵箱。

注意:

  • 這裏的 [email protected] 只是生成的 sshkey 的名稱,並不約束或要求具體命名爲某個郵箱。現網的大部分教程均講解的使用郵箱生成,其一開始的初衷僅僅是爲了便於辨識,所以使用了郵箱。
  • 直接執行ssh-keygen命令也可以生成SSHkey密鑰。。
  • 命令在任何路徑下都可以執行。

生成SSHkey密鑰示例:

# 1.執行ssh-keygen命令,生成SSHkey密鑰
L@DESKTOP-T2AI2SU MINGW64 /j
$ ssh-keygen -t rsa -C "[email protected]"

# 生成公共/私有rsa密鑰對。
Generating public/private rsa key pair.

# 生成公共/私有rsa密鑰對。
# 輸入要在/c/Users/L/.ssh/目錄中,保存密鑰的文件名稱
# 回車代表默認,即id_rsa,例如:/c/Users/L/.ssh/id_rsa
# 如果輸入指定的文件名。則爲/c/Users/L/.ssh/指定的文件名。
# 我們回車,執行默認選項即可。
Enter file in which to save the key (/c/Users/L/.ssh/id_rsa):

# 創建目錄“ /c/Users/L/.ssh”。
Created directory '/c/Users/L/.ssh'.

# 提示你:不輸入密碼,則密碼爲空。這裏我們是可以設定密碼的,例如123456。
# 我們回車即可。
Enter passphrase (empty for no passphrase):

# 再次輸入相同的密碼:(同上也回車)
Enter same passphrase again:

# 經過上面三次回車,下面SSHKey密鑰就自動生成了
# 您的私鑰已保存在/c/Users/L/.ssh/id_rsa中。
Your identification has been saved in /c/Users/L/.ssh/id_rsa.
# 您的公鑰已保存在/c/Users/L/.ssh/id_rsa.pub中。
Your public key has been saved in /c/Users/L/.ssh/id_rsa.pub.
# 關鍵指紋是:(如果沒有指定-C 參數內容,默認應該是用系統用戶@主機名來代替)
The key fingerprint is:
SHA256:hcDGM+lT+gMRTqxOZnGtxFwiqZ/dMRRIpCXlWJLG3GY [email protected]
# 密鑰的隨機圖像爲:
The key's randomart image is:
+---[RSA 3072]----+
|   o+&@*o.       |
|    B%Eo+.       |
|   ooXoO. .      |
|  . = * o.       |
|   * o =So       |
|    + . +        |
|         .       |
|                 |
|                 |
+----[SHA256]-----+

說明:

生成的SSHkey密鑰存放在,主機的當前用戶主目錄下的,隱藏目錄.ssh下面。

.ssh目錄下面有兩個文件,默認分別是id_rsa文件與id_rsa.pub文件,其中id_rsa文件中存放的是私鑰,id_rsa.pub文件中存放的是公鑰。

執行完成上邊命令,在用戶根目錄自動生成.ssh目錄。(windows系統中c:/users/administrator/.ssh可以找到)

進入.ssh目錄中可以看到兩個文件,id_rsa文件是私鑰,id_rsa.pub是是公鑰,這兩個文件是成對出現的,說明生成SSHkey密鑰成功。

2)補充:生成SSHkey密鑰到指定的目錄中

執行命令:$ ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/github_id_rsa

這樣可以直接指定生成密鑰文件的位置和名稱。

可以到~/.ssh目錄下進行查看,也是生成了一對密鑰,github_id_rsagithub_id_rsa.pub

這樣的操作,也是非常方便的。

(2)把公鑰的內容配置到GitHub中

1)複製公鑰文件內容

L@DESKTOP-T2AI2SU MINGW64 /j
$ cat /c/Users/L/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2F5mS2Tc2dFlSCD6No4ySbNeAVc6V/pLIM7VVD4EJkfJQ3XgN7nWhVMHVOCYnkobfXmWq40RWIq12R1jftw4zRJuJ4GXAOjOyvog1M3dpr/QwA2AB+To4jsf0UVdxJ8ckiQ2yCtPauzAAoyXsiwHr3QSjXoRU5q0TZu4RhtNkvlO9w3KUbjxQoderGJr3PjOUOWfEqIdG8n14SX9/wgM8TC+0FDKjxJmeCaZa+Y+1HvEtreKP5Bj1Z2p3lusS+UGBuiX8/Kgo76N/7SgkZFYOJ9nbUSJeVTxUPpoaGpfA6cWRKWNP16fJ9oX59d4OxJ4/LtCVkRd5vVKQEnCQlvJgfnXbkOVcr3c0V19Ku+DvyCf4/YVGR0E6vjCRVucQ4v3Pre3Tu1bJ3iOCT4fpQFz8zJEKdyFhuIifPUei9qr7lihwjsmxom2FGBrkRphS3/CjA9nAlWxv2fBsuC11ZZAlnm4gD6bDfHiso0tpvJOO0S7IsqD5it0tZmEjd0KwuCk= [email protected]

2)登陸GitHub官網進入設置頁面

在GitHub網站的右上角,點擊下圖所示圖標,在下拉列表中選擇Settings,打開Settings設置頁面。

3)在左邊導航欄中,選擇SSH and GPG keys,在右邊點擊new SSH key

4)編輯SSH Key信息,並創建SSH Key

填寫頁面中信息:

  • 需要編輯一個Title來說明此Key認證的是哪個用戶。可以隨意定義,例如,這是張三在家裏主機上的Git要連接該GitHub,所以可以命名爲zhangsanHome。
  • 把公鑰(id_rsa.pub)文件中的內容填寫的第二個欄中。

如下圖:

點擊Add SSH key後,即可看到剛剛在GitHub中配置的公鑰信息。

(3)驗證SSH鏈接認證是否配置成功

也就是測試SSHkey密鑰是否配置成功。

使用ssh -T命令進行校驗,執行ssh -T [email protected]命令。

# 執行校驗命令
L@DESKTOP-T2AI2SU MINGW64 /j
$ ssh -T [email protected]

# 無法確定主機“ github.com(192.30.255.113)”的真實性。
# RSA密鑰指紋爲SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8。
# 您確定要繼續連接(是/否/ [指紋])嗎?
The authenticity of host 'github.com (192.30.255.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
# 我們這裏輸入yes,需要進行校驗。

# 如果設置了密碼,就會第二個停頓,就需要輸入上邊我們設置的密碼123456。

# 最後如下內容,證明驗證成功!
Hi Lxxxxx! You've successfully authenticated, but GitHub does not provide shell access.

此時,已經證明我們配置好了,Git賬戶SSHKey的認證方式。

提示:其他遠程倉庫的SSHKey配置步驟都類似,例如:Gitee,GitHub、Gitlab等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章