使用 SSH 連接/上傳到你的 GitHub(Ed25519)

前言

GitHub 除了使用 https 模式連接/上傳之外,也可以使用 ssh 的方式,但是 ssh 的方式比較複雜一點,所以寫一篇紀錄一下。

SSH

前面先講點 SSH 的小知識。

那麼什麼是 SSH 呢?SSH 全名是「Secure Shell (安全外殼協定)」,主要是一種加密的網路傳輸協定,在早期我們的網路傳輸協定是 HTTP 模式,也就是所謂的明文傳輸,而明文傳輸就會有一些資安上的問題,例如什麼樣子的問題呢?舉例來講,明文傳輸中若中途被駭客攔截封包的話,是可以透過該封包竊取你的帳號密碼,因此就誕生了這個 SSH 協定。

而 SSH 主要是採用非對稱加密的方式來實施身份驗證,因此主要會有公鑰(Public key)與私鑰(Private key)這兩隻檔案,那麼什麼是非對稱加密?舉例來講對稱加密的意思就是接收方與傳送方都是使用同一個 key,而非對稱加密則是如前面所提會有公鑰與私鑰這兩隻檔案,公鑰主要用於驗證你的私鑰正確性,因此只有持有私鑰的你能夠解密或者連接哦。

最後總結一下重點,就是「私鑰(Private key)千萬不能外流!」只能在自己電腦上。

而會寫這一篇的原因主要也是與 GitHub 的政策有關,可以詳見這篇

SSH 指令小知識

基本上你在網路找到的任何一篇 SSH key 生成的文章,大多都會寫以下這一個指令:

1
ssh-keygen -t rsa -b 4096 -C "example@example.com"

但是其實很少會提到這些關於這個指令的參數說明,因此這邊我也順便紀錄說明一下。

首先 ssh-keygen 是 SSH 服務的生成與管理等等的指令,而它後面所接著帶的 -t 參數意思是指要生成哪一種 key 的類型,通常比較常見的有以下兩種:

  • rsa (RSA加密演算法)
  • dsa (數位簽章演算法)

這兩種演算法是什麼就不在這篇文章內介紹內,所以可以自己上網查一下。

接下來是 -t rsa 後面的 -b 指令,這一個指令的意思是設定 key 的長度(bits)。

最後一個則是 -C 這個意思是新增一個註解,所以在上方指令中就是要增加一個 Email 的註解。

當然 ssh-keygen 還有其他的指令,例如 -f 指定密鑰的生成名稱(預設是:id_rsa.pub、id_rsa)。

生成 SSH

接下來示範都會以 Mac 為主,基本上 Window 差異並不上,所以可以參考。

接下來就準備生成 GitHub 專用的 SSH 吧!但我們怎麼知道 GitHub 要的 SSH 是長怎樣?其實在 GitHub 官方文件這一篇「Generating a new SSH key and adding it to the ssh-agent」就有提到相關指令:

Mac

1
ssh-keygen -t ed25519 -C "your_email@example.com"

Windows

1
ssh-keygen -t ed25519 -C "your_email@example.com"

這時候你會發現與網路上相當多的文章都是這一個指令 ssh-keygen -t rsa -b 4096 -C "your_email@example.com",但這個指令主要是比較舊的系統不支援 Ed25519 演算法的系統所使用,而 Ed25519 雖然已經有一段時間了,但是以文獻來講安全性以及效能上會更好,因此官方建議用 Ed25519 那麼就直接用這個演算法吧。

ssh-keygen

輸入完畢後它會先問你 ssh 生成的路徑要在哪裡與是否要設置密碼:

1
2
3
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/rayxu/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):

如果沒有要特別調整的話,一直按下 Enter 即可,當你看到以下畫面時,就代表生成好了:

ed25519

取得 SSH 公鑰並新增到 GitHub

生成完畢後到畫面上所提示的路徑去找 SSH key,以我的電腦舉例就是在 /Users/rayxu/.ssh/,這邊要注意 Mac 通常預設 .ssh 資料夾是隱藏的,因此你要按下 Shift + Command + .(就是問號旁邊的 > 按鍵)顯示隱藏資料夾就可以找到了:

.ssh

接下來打開 id_ed25519.pub 檔案應該會獲得一大推好像亂碼的東西,把裡面疑似亂碼的東西全選複製起來,然後打開 GitHub 到 Setting:

Setting

然後在側邊欄找到「SSH and GPG keys」:

SSH and GPG keys

這個頁面上方有一個 SSH keys,旁邊有一個按鈕「New SSH key」用力的點下去!

New SSH key

(為了寫這一篇我還特別刪除自己的 SSH key QQ)

接下來會跳到一個 Add new 頁面,title 基本上可以隨你填寫,通常我會填自己的電腦名稱,而底下 key 就填你剛剛的公鑰:

Add SSH Key

填寫完畢之後可能會要你輸入帳號/密碼,輸入完畢之後你就可以在原本的 SSH keys 頁面看到新增進去囉

新增成功

測試 SSH

基本上到這邊你就做完了,可是你會發現鑰匙並沒有亮起來,因此你就挑選你任何一個私密專案,然後採用 SSH 的方式 git clone 下來試試看

SSH 模式

如果可以正常 clone 下來就代表你成功啦~

而且剛剛的 SSH key 頁面上的鑰匙也會亮起來,代表已經被使用且正常運作中:

正常運作

另一種測試方式則是輸入 ssh -T git@github.com,如果成功的話就會得到以下訊息:

1
Hi hsiangfeng! You've successfully authenticated, but GitHub does not provide shell access.

如果發生錯誤的話,建議你可以試著重新再跑一次流程哩

參考文獻

Liker 讚賞 (拍手)

如果這一篇筆記文章對你有幫助,希望可以求點支持或 牡蠣 鼓勵 (ノД`)・゜・。

Liker 是一個按讚(拍手)的讚賞機制,每一篇文章最多可以按五下拍手,過程你只需要登入,如果你願意按個讚,對於創作者來講是一個莫大的鼓勵與支持。

Google AD

撰寫一篇文章其實真的很花時間,如果你願意「關閉 Adblock (廣告阻擋器)」來支持我的話,我會非常感謝你 ヽ(・∀・)ノ