1. 程式人生 > 其它 >配置SSH連線Git教程

配置SSH連線Git教程

有了門,我們可以出去;有了窗,我們可以不必出去。——錢鍾書《圍城》

0 說在前面的話

Git 是個好東西,但是用起來有兩個不方便之處:

  • 操作時要頻繁輸密碼;
  • 連線 github 時由於網速問題經常失敗。

使用 ssh 連線便可以解決這樣的問題,但奈何本人記性不好,每次配置都要上網查半天教程,於是這次終於下定決心自己總結了。[1]

1 關於 ssh

SSH 是較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。[2]使用 SSH 協議可以連線遠端伺服器和服務並向它們驗證。連線遠端倉庫時無需輸入密碼而且能實現對 github 的流暢訪問。除此之外我還用 ssh 協議成功在 Windows Terminal 中連線上了自己的遠端伺服器。

2 檢查現有的 ssh 金鑰

Windows 開啟 GitBash,Linux 下開啟終端,輸入:

$ ls -al ~/.ssh

如果你看到以下輸出,那麼說明你已經有 ssh 金鑰(以 .pub 結尾的檔案):

$ ls -al ~/.ssh
total 26
drwxr-xr-x 1 197121    0 Mar 31 22:29 ./
drwxr-xr-x 1 197121    0 Apr 16 23:36 ../
-rw-r--r-- 1 197121 2610 Mar 31 22:27 id_rsa
-rw-r--r-- 1 197121  573 Mar 31 22:27 id_rsa.pub
-rw-r--r-- 1 197121  831 Apr  1 12:08 known_hosts
-rw-r--r-- 1 197121   92 Mar 31 22:26 known_hosts.old

如果你不想用原來的金鑰或者沒有金鑰的話也不用著急,看下一步如何生成新的 ssh 金鑰。

3 建立新的 ssh 金鑰

3.1 生成新的 ssh 金鑰

在 Windows 的 GitBash 或 Linux 終端輸入:

$ ssh-keygen -t rsa -b 4096 -C "[email protected]"
# 你可以把引號裡的替換為你自己的郵箱,不換的話問題不大

然後終端會讓你輸入一些東西,可以不用輸入直接一路回車,看到:

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:t3925EJgD4kcUp69dBv/nqkM85n0I5mFRW4BlZwaVeo [email protected]
The key's randomart image is:
+---[RSA 4096]----+
|             .=o=|
|          .  . B |
|         o +  * .|
|        . * =oo+ |
|        So.B +A+ |
|         .o.B.o.o|
|          .o o+o.|
|           .*+B.*|
|            .OoBo|
+----[SHA256]-----+

代表金鑰生成成功。

3.2 將SSH金鑰新增到ssh-agent

3.2.1 確保 ssh 正在執行

終端輸入:

$ eval
$ ssh-agent -s

看到如下輸出:

SSH_AUTH_SOCK=/tmp/ssh-xkZRdf3bu6fW/agent.1075848; export SSH_AUTH_SOCK;
SSH_AGENT_PID=1075849; export SSH_AGENT_PID;
echo Agent pid 1075849;

代表 ssh 正常執行。

3.3.3 新增 ssh 到賬戶

執行以下兩條命令:

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa # 這裡如果檔名被改過要寫你自己定義的檔名

看到輸出:

Identity added: id_rsa ([email protected])

新增成功!

4 將金鑰新增到 github 賬戶

4.1 複製你的公鑰

在終端使用:

$ cat ~/.ssh/id_rsa.pub

看到:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDJ6c4cXmpyJr/anagkKz4K+RCFYSJlkFvdNY6JBmKeomrQYfChpDZFxjUkj72XfSAhGyJjPcn4pTHHLCHOS2jzstrvE0Cq19p/mbbvwsq5GGqmzsTYqOeqpTIeEKnXlv/PXkh/mXJVOWhui8esIQk4bU1Ss2wIEVMSRI+9n8RgyBcpbiq4m/SDrUy1HJNHO3pyjcf7k6XUjfxeTRWMVtj7IH3yQbgrZQo90VHsVhkmTeyvaCv8tJLi/j+t9E1/kOWPbpTFTmaAe190SuPVwpQjyRH/Z8UWVdCYxgeZ9l9JN3MTyHfRWz6FuDJdoQze94mU1NwEP8AftHNVTsMT2qvbAYK3Mcr6/j1R1vAeq4mbgn1dp79RGW0cKOSx336WuFsfebMV7QLZ1RnW5xF6VgghMd4x9Hk8kmLL6s8I7ZfbjNCgyAhL9d5N01lsz8hdMv1BHzaZp+yk0EXUy8fxFvaSYaUpQuKb8eL6DesBJJ8FH4GVb6+V7J7OsXhG8QiKdDsDbfGDJs/Aq0Ew14cuHlD9y/1A44b+Kt6WwmcISGG85SM+YUcPuay8gEFzNQ/Tzgw4bJznw0RHHVuvtpmjvlBUxXRTSICvrrAJ19/yXoHcZtiPncpDHVnyIy6IVAg23MCeUbrIPIPKQXVHG/5ouRk0YbkFbl6kSq/Yurb35N7tDQ== [email protected]

全給複製下來!

4.2 將公鑰新增到 github 賬戶

然後去 gihub:

  • 右上角下拉麵板選擇 Settings
  • 左側選擇 SSH and GPG keys
  • 點選 New SSH key
  • 隨便起一個 title;
  • 把公鑰貼上到下面。

可能會輸入密碼,新增完成!

5 測試 ssh 連線

在終端中輸入:

$ ssh -T [email protected]

可能看到如下警告:

The authenticity of host 'github.com (20.205.243.166)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

輸入 yes:

Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
Hi xxxxxx You've successfully authenticated, but GitHub does not provide shell access.

如果 xxxxxx 是你的 github 使用者名稱,說明成功。

6 配置 git 使用 ssh 金鑰登入

首先將你的倉庫 clone 下來到一個位置。然後進入你的倉庫。

6.1 檢查當前的 remote url

在倉庫下輸入:

$ git remote -v

看到輸出:

origin  https://xxxxx.git (fetch)
origin  https://xxxxx.git (push)

說明當前使用的還是 https 協議,如果以 git 開頭表示 git 協議。

6.2 修改 remote url 為 git 協議

上 github 倉庫,點 Code,選擇 SSH,複製連結:

在終端輸入:

$ git remote set-url origin [email protected]:xxxxx.git

再檢查 git 協議:

$ git remote -v

出現:

origin  [email protected] (fetch)
origin  [email protected] (push)

成功!

接下來可以快樂 push&pull 了。



  1. 參考自:使用SSH連線到GitHub - 簡書 (jianshu.com)配置github SSH公鑰登入 - 苦咖啡~~ - 部落格園 (cnblogs.com) ↩︎

  2. 來自《百度百科》 ↩︎