github每次pull/push代碼時要求推送代碼的用戶是合法的,所以每次推送時候都要輸入賬號密碼用以驗證用戶是否為合法用戶,而ssh是一種安全的傳輸模式,可以代替用戶的這一“輸入賬號密碼”的行為來驗證用戶。
github的倆種操作方式
-
https
可以隨意克隆github上的項目,而不管是誰的;在pull/push的時候是需要驗證用戶名和密碼的
-
ssh
克隆者必須是擁者或管理員,且需要先添加 SSH key ,否則無法克隆。在pull/push的時候不再是驗證用戶名和密碼,而是通過驗證ssh的方式來驗證用戶。
ssh(安全外殼協議)##
定義:
SSH 為 Secure Shell 的縮寫,由 IETF 的網絡小組(Network Working Group)所制定;SSH 為建立在應用層和傳輸層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。SSH最初是UNIX系統上的一個程序,后來又迅速擴展到其他操作平台。SSH在正確使用時可彌補網絡中的漏洞。SSH客戶端適用於多種平台。幾乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可運行SSH。 --百度百科
功能:
傳統的網絡服務程序,如:ftp、pop和telnet在本質上都是不安全的,因為它們在網絡上用明文傳送口令和數據,別有用心的人非常容易就可以截獲這些口令和數據。而且,這些服務程序的安全驗證方式也是有其弱點的, 就是很容易受到“中間人”(man-in-the-middle)這種方式的攻擊。所謂“中間人”的攻擊方式, 就是“中間人”冒充真正的服務器接收你傳給服務器的數據,然后再冒充你把數據傳給真正的服務器。服務器和你之間的數據傳送被“中間人”一轉手做了手腳之后,就會出現很嚴重的問題。通過使用SSH,你可以把所有傳輸的數據進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。使用SSH,還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、PoP、甚至為PPP提供一個安全的"通道"。 --百度百科
使用步驟
-
查看是否已經存在ssh秘鑰
打開git bash,輸入
$ cd ~/.ssh $ ls
如果,提示不存在此目錄,則進行第二步操作,否則,你本機已經存在ssh公鑰和私鑰,可以略過第二步,直接進入第三步操作。
-
生成ssh秘鑰
$ ssh-keygen -t rsa -C "your_email@example.com"
代碼參數含義:
- -t 指定密鑰類型,默認是 rsa ,可以省略。
- -C 設置注釋文字,比如郵箱。
- -f 指定密鑰文件存儲文件名。
根據提示,需要指定文件位置和密碼,如果是你足夠放心,其實都可以直接回車,不需要什么密碼。執行完以后,可在/c/Users/you/.ssh/路徑下看到剛生成的文件:id_rsa和id_rsa.pub。即公鑰和私鑰。
-
在GitHub賬戶中添加公鑰
- 登錄你的github,頭像處下拉框選擇settings。
- 進入設置頁后點擊側邊欄的
SSH and GPG keys
按鈕。 - 點擊
New SSH key
,title可以任意填,並且將上一步驟生成的id_rsa.pub的內容復制到這里的key
輸入框中。
-
確認
$ ssh -T git@github.com
在這里我收到一個提示:
Warning: Permanently added the RSA host key for IP address '192.30.253.113' to the list of known hosts.
直接回車,最后看到這個就說明大功告成:
Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.
遇到的問題
添加完公鑰后,使用小烏龜(TortoiseGit)pull代碼時報錯:
no supported authentication methods aviaible(server sent:publickey)
查了一下,發現是因為TortoiseGit和Git的沖突 我們需要把TortoiseGit設置改正如下。
- 右鍵TortoiseGit -> Settings -> Network
- 將SSH client指向~\Git\usr\bin\ssh.exe(Git安裝路徑下)