當我們從 GitHub 克隆某個倉庫時,往往使用 HTTPS 協定,除此之外,也可以使用 SSH 協定;當我們的客戶機與遠端伺服器連線時,更加離不開 SSH 協定。如果我們需要連線多個遠端終端,那麼合理設定多個 SSH 金鑰就顯得很有必要。
SSH 全稱為:Secure Shell,是一種加密的網路傳輸協定,通過在網路中建立安全隧道來實現使用者端與伺服器之間的連線。SSH 在 資料傳輸 時基本上都採用對稱加密方式,但是在進行 身份驗證 時卻需要採用非對稱加密的形式,也就是 公鑰—私鑰對 的形式。
生成 SSH 金鑰對需要使用 ssh-keygen
,如今的主流作業系統 Windows、Linux 和 macOS 等往往事先已經安裝好了。
SSH 生成金鑰對時可以使用多種加密演演算法,這些加密演演算法生成的最常用的金鑰型別是 rsa 和 ed25519。
rsa:最常用的公鑰加密演演算法,使用極其廣泛,並且支援較好。金鑰位數越多,安全性越好,但是效能會有所降低,常見的有 RSA 2048 和 RSA 4096 等。
ed25519:橢圓曲線演演算法生成的金鑰,金鑰長度短,安全可靠並且具有高效能。它的安全性在 RSA 2048 與 RSA 4096 之間,但是效能卻在數十倍以上。(推薦使用)
ed25519 需要 OpenSSH 版本大於 6.5(2014 年的古老版本),應該不會有人的使用者端和伺服器不滿足吧(不會吧不會吧!)
ssh-keygen 生成的金鑰對預設儲存於家目錄(Windows 的 C:\Users\xxx
,Linux/macOS 的 ~
)的 .ssh
資料夾中
使用 ssh-keygen 命令選擇一種金鑰型別來建立
# 生成 RSA 2048 金鑰
ssh-keygen -t rsa -b 2048 -C "[email protected]"
# 生成 RSA 4096 金鑰
ssh-keygen -t rsa -b 4096 -C "[email protected]"
# 生成 ed25519 金鑰
ssh-keygen -t ed25519 -C "[email protected]"
-t
:選擇生成金鑰的型別-b
:設定金鑰位數-C
:金鑰註釋,這裡要改為你自己的郵箱地址執行以上命令後,會提示你設定金鑰儲存路徑,按 Enter
預設即可。
然後會提示你設定密碼,根據需要自行選擇設不設定(不設定按 Enter
即可,已經非對稱加密過,不設定也問題不大;設定的話安全性會提高,但是每次連線時需要輸入密碼,會麻煩一點)。
以生成金鑰 ed25519 為例,操作完後會在家目錄的 .ssh 資料夾中生成私鑰 id_ed25519
和公鑰 id_ed25519.pub
兩個檔案。
許可權設定
在 Linux 中,還需要設定私鑰檔案的許可權才可使用:
chmod 600 ~/.ssh/id_ed25519
如果你同時使用 GitHub
、Gitee
和 阿里雲
,都需要設定 SSH 金鑰,可以將常用 SSH 登陸資訊寫進全域性組態檔
開啟終端,輸入
# 建立 .ssh 資料夾
mkdir -p ~/.ssh
# 進入 .ssh 資料夾
cd ~/.ssh
以下介紹以生成 ed25519 金鑰為例:
# 生成 GitHub 金鑰
ssh-keygen -t ed25519 -f github_ed25519 -C "[email protected]"
# 生成 Gitee 金鑰
ssh-keygen -t ed25519 -f gitee_ed25519 -C "[email protected]"
# 生成 阿里雲 金鑰
ssh-keygen -t ed25519 -f aliyun_ed25519 -C "[email protected]"
-f
:生成金鑰的名稱,可自行修改在 .ssh 資料夾下建立 config
檔案(~/.ssh/config
)
# ------------ 設定說明(始) ------------
# Host:別名,HostName:伺服器域名或 IP 地址
# User:使用者名稱
# 例:在 git clone [email protected]:torvalds/linux.git 中
# User 是 git,Host 是 github.com
# IdentityFile:私鑰路徑
# ------------ 設定說明(末) ------------
# ------------ 具體設定(始) ------------
# GitHub 金鑰
Host github.com
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_ed25519
# Gitee
Host gitee.com
HostName gitee.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_ed25519
# Aliyun
Host my_aliyun
HostName xxx.xxx.xxx.xxx
User xxx
Port 22
PreferredAuthentications publickey
IdentityFile ~/.ssh/aliyun_ed25519
# ------------ 具體設定(末) ------------
許可權設定
在 Linux 中,組態檔 config
和私鑰檔案的許可權都需要設定才可使用:
chmod 600 config github_ed25519 gitee_ed25519 aliyun_ed25519
登陸 GitHub,依次開啟 Settings => SSH and GPG keys => New SSH key
然後將公鑰(切記是公鑰)內容貼上過去
最後,使用 ssh 命令測試與 GitHub 的連線
ssh -T [email protected]
提示時輸入 yes
即可,如果出錯,可以在 -T
後面加上 -v
引數檢視具體錯誤資訊
Gitee 和 GitHub 新增方法類似,不做贅述
在伺服器系統中找到 ~/.ssh/authorized_keys
檔案(沒有則建立),另起一行,將本地公鑰(切記是公鑰)內容貼上過去,並設定許可權:
chmod 600 ~/.ssh/authorized_keys
測試連線,以 多金鑰設定 中 阿里雲
為例:
# 使用 Host 別名
ssh my_aliyun
# 不使用 Host 別名
ssh [email protected]