SSH 多金鑰配置

前言

當我們從 GitHub 克隆某個倉庫時,往往使用 HTTPS 協議,除此之外,也可以使用 SSH 協議;當我們的客戶機與遠端伺服器連線時,更加離不開 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

資料夾中

1。單金鑰配置

使用 ssh-keygen 命令選擇一種金鑰型別來建立

# 生成 RSA 2048 金鑰ssh-keygen -t rsa -b 2048 -C “your@email。com” # 生成 RSA 4096 金鑰ssh-keygen -t rsa -b 4096 -C “your@email。com” # 生成 ed25519 金鑰ssh-keygen -t ed25519 -C “your@email。com”

-t

:選擇生成金鑰的型別

-b

:設定金鑰位數

-C

:金鑰註釋,這裡要改為你自己的郵箱地址

執行以上命令後,會提示你設定金鑰儲存路徑,按

Enter

預設即可。

然後會提示你設定密碼,根據需要自行選擇設不設定(不設定按

Enter

即可,已經非對稱加密過,不設定也問題不大;設定的話安全性會提高,但是每次連線時需要輸入密碼,會麻煩一點)。

以生成金鑰 ed25519 為例,操作完後會在家目錄的 。ssh 資料夾中生成私鑰

id_ed25519

和公鑰

id_ed25519。pub

兩個檔案。

許可權設定

在 Linux 中,還需要設定私鑰檔案的許可權才可使用:

chmod 600 ~/。ssh/id_ed25519

2。多金鑰配置

如果你同時使用

GitHub

Gitee

阿里雲

,都需要設定 SSH 金鑰,可以將常用 SSH 登陸資訊寫進全域性配置檔案

開啟終端,輸入

# 建立 。ssh 資料夾mkdir -p ~/。ssh # 進入 。ssh 資料夾cd ~/。ssh

以下介紹以生成 ed25519 金鑰為例:

# 生成 GitHub 金鑰ssh-keygen -t ed25519 -f github_ed25519 -C “your@email。com” # 生成 Gitee 金鑰ssh-keygen -t ed25519 -f gitee_ed25519 -C “your@email。com” # 生成 阿里雲 金鑰ssh-keygen -t ed25519 -f aliyun_ed25519 -C “your@email。com”

-f

:生成金鑰的名稱,可自行修改

在 。ssh 資料夾下建立

config

檔案(

~/。ssh/config

# —————— 配置說明(始) —————— # Host:別名,HostName:伺服器域名或 IP 地址# User:使用者名稱# 例:在 git clone git@github。com:torvalds/linux。git 中# User 是 git,Host 是 github。com# IdentityFile:私鑰路徑 # —————— 配置說明(末) —————— # —————— 具體配置(始) —————— # GitHub 金鑰Host github。comHostName github。comUser gitPreferredAuthentications publickeyIdentityFile ~/。ssh/github_ed25519 # GiteeHost gitee。comHostName gitee。comUser gitPreferredAuthentications publickeyIdentityFile ~/。ssh/gitee_ed25519 # AliyunHost my_aliyunHostName xxx。xxx。xxx。xxxUser xxxPort 22PreferredAuthentications publickeyIdentityFile ~/。ssh/aliyun_ed25519 # —————— 具體配置(末) ——————摺疊

許可權設定

在 Linux 中,配置檔案

config

和私鑰檔案的許可權都需要設定才可使用:

chmod 600 config github_ed25519 gitee_ed25519 aliyun_ed25519

五、遠端配置

1。GitHub/Gitee

登陸 GitHub,依次開啟

Settings => SSH and GPG keys => New SSH key

然後將公鑰(切記是公鑰)內容貼上過去

最後,使用 ssh 命令測試與 GitHub 的連線

ssh -T git@github。com

提示時輸入

yes

即可,如果出錯,可以在

-T

後面加上

-v

引數檢視具體錯誤資訊

Gitee 和 GitHub 新增方法類似,不做贅述

2。伺服器

在伺服器系統中找到

~/。ssh/authorized_keys

檔案(沒有則建立),另起一行,將本地公鑰(切記是公鑰)內容貼上過去,並設定許可權:

chmod 600 ~/。ssh/authorized_keys

測試連線,以

多金鑰配置

阿里雲

為例:

# 使用 Host 別名ssh my_aliyun # 不使用 Host 別名ssh xxx@xxx。xxx。xxx。xxx