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)公鑰與私鑰
對於公鑰與私鑰,要了解以下三點:
- “公鑰與私鑰加密”是一種“不對稱的加密方式”,是傳統“對稱加密方式”功能的增強。
- 公鑰與私鑰是成對的,即一個公鑰對應一個私鑰。使用公鑰加密後,只能使用私鑰進行解密。
- 公鑰與私鑰的關係:就好比“鎖與鑰匙”的關係。公鑰相當於“鎖”,鎖是可以被他人看到的,是要發送給別人的,所以稱爲公鑰。私鑰相當於“鑰匙”,它是不能公開的,只能有公鑰發出者保存。
(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_rsa
和github_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等。