使用 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 "[email protected]" |
但是其實很少會提到這些關於這個指令的參數說明,因此這邊我也順便紀錄說明一下。
首先 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 為主,基本上 Windows 差異並不大,所以可以參考。
接下來就準備生成 GitHub 專用的 SSH 吧!但我們怎麼知道 GitHub 要的 SSH 是長怎樣?其實在 GitHub 官方文件這一篇「Generating a new SSH key and adding it to the ssh-agent」就有提到相關指令:
Mac
1 | ssh-keygen -t ed25519 -C "[email protected]" |
Windows
1 | ssh-keygen -t ed25519 -C "[email protected]" |
這時候你會發現與網路上相當多的文章都是這一個指令 ssh-keygen -t rsa -b 4096 -C "[email protected]"
,但這個指令主要是比較舊的系統不支援 Ed25519 演算法的系統所使用,而 Ed25519 雖然已經有一段時間了,但是以文獻來講安全性以及效能上會更好,因此官方建議用 Ed25519 那麼就直接用這個演算法吧。
輸入完畢後它會先問你 ssh 生成的路徑要在哪裡與是否要設置密碼:
1 | Generating public/private ed25519 key pair. |
如果沒有要特別調整的話,一直按下 Enter 即可,當你看到以下畫面時,就代表生成好了:
取得 SSH 公鑰並新增到 GitHub
生成完畢後到畫面上所提示的路徑去找 SSH key,以我的電腦舉例就是在 /Users/rayxu/.ssh/
,這邊要注意 Mac 通常預設 .ssh 資料夾是隱藏的,因此你要按下 Shift + Command + .
(就是問號旁邊的 >
按鍵)顯示隱藏資料夾就可以找到了:
接下來打開 id_ed25519.pub
檔案應該會獲得一大推好像亂碼的東西,把裡面疑似亂碼的東西全選複製起來,然後打開 GitHub 到 Setting:
然後在側邊欄找到「SSH and GPG keys」:
這個頁面上方有一個 SSH keys,旁邊有一個按鈕「New SSH key」用力的點下去!
(為了寫這一篇我還特別刪除自己的 SSH key QQ)
接下來會跳到一個 Add new 頁面,title
基本上可以隨你填寫,通常我會填自己的電腦名稱,而底下 key
就填你剛剛的公鑰:
填寫完畢之後可能會要你輸入帳號/密碼,輸入完畢之後你就可以在原本的 SSH keys 頁面看到新增進去囉
測試 SSH
基本上到這邊你就做完了,可是你會發現鑰匙並沒有亮起來,因此你就挑選你任何一個私密專案,然後採用 SSH 的方式 git clone
下來試試看
如果可以正常 clone 下來就代表你成功啦~
而且剛剛的 SSH key 頁面上的鑰匙也會亮起來,代表已經被使用且正常運作中:
另一種測試方式則是輸入 ssh -T [email protected]
,如果成功的話就會得到以下訊息:
1 | Hi hsiangfeng! You've successfully authenticated, but GitHub does not provide shell access. |
如果發生錯誤的話,建議你可以試著重新再跑一次流程哩