1. 程式人生 > >使用ssh連線gitHub

使用ssh連線gitHub

github每次pull/push程式碼時要求推送程式碼的使用者是合法的,所以每次推送時候都要輸入賬號密碼用以驗證使用者是否為合法使用者,而ssh是一種安全的傳輸模式,可以代替使用者的這一“輸入賬號密碼”的行為來驗證使用者。

github的兩種操作方式

1.https

  • 可以隨意克隆github上的專案,而不管是誰的;在pull/push的時候是需要驗證使用者名稱和密碼的

2.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提供一個安全的"通道"
--百度百科

使用步驟

1.檢視是否已經存在ssh祕鑰

1>開啟git bash,輸入

$ cd ~/.ssh
$ ls
  • 如果,提示不存在此目錄,則進行第二步操作,否則,你本機已經存在ssh公鑰和私鑰,可以略過第二步,直接進入第三步操作。

2>生成ssh祕鑰

$ ssh-keygen -t rsa -C "[email protected]"
  • 程式碼引數含義:
    -t 指定金鑰型別,預設是 rsa ,可以省略。
    -C 設定註釋文字,比如郵箱。
    -f 指定金鑰檔案儲存檔名。
    根據提示,需要指定檔案位置和密碼,如果是你足夠放心,其實都可以直接回車,不需要什麼密碼。執行完以後,可在/c/Users/you/.ssh/路徑下看到剛生成的檔案:id_rsa和id_rsa.pub。即公鑰和私鑰。

3>在GitHub賬戶中新增公鑰

  • 登入你的github,頭像處下拉框選擇settings。
  • 進入設定頁後點擊側邊欄的SSH and GPG keys按鈕。
  • 點選New SSH key,title可以任意填,並且將上一步驟生成的id_rsa.pub的內容複製到這裡的key輸入框中。

4>確認

$ 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安裝路徑下)