雲效代碼管理 (Codeup)的倉庫支援 HTTP(S) 和 SSH 兩種訪問協議,SSH 協議可以實現安全的免密認證,且效能比 HTTP(S) 協議更好。本文介紹如何在 Codeup 中配置和使用 SSH 金鑰進行代碼推拉。
前提條件
在使用 SSH 協議作業碼庫前,請產生並上傳您的 SSH 公開金鑰,完成 SSH 公開金鑰和雲效帳號的對應。
通過 SSH 協議訪問 Codeup,需要滿足如下條件。
本機已安裝 Git並保證版本大於 1.9(通過
git --version可擷取本地的版本)。本機需要安裝 OpenSSH 用戶端(GNU/Linux, macOS, 或 Windows 10 已內建 OpenSSH)。
SSH 盡量保持最新,6.5之前的版本由於使用 MD5 簽名,可能存在安全問題。
背景資訊
Codeup 支援的 SSH 密碼編譯演算法類型如下所示:
演算法類型 | 公開金鑰 | 私密金鑰 |
ED25519 (推薦) | id_ed25519.pub | id_ed25519 |
RSA (不推薦) | id_rsa.pub | id_rsa |
步驟一:查看已存在的 SSH 金鑰
在產生新的 SSH 金鑰前,請先確認是否需要使用本地已產生的SSH密鑰,SSH 金鑰對一般存放在本機使用者的根目錄下。
Linux、Mac 請直接使用以下命令查看已存在的公開金鑰,Windows 使用者在 WSL(需要 windows10 或以上)或 Git Bash下使用以下命令查看已產生公開金鑰:
ED25519 演算法
cat ~/.ssh/id_ed25519.pubRSA 演算法
cat ~/.ssh/id_rsa.pub如果返回一長串以 ssh-ed25519 或 ssh-rsa 開頭的字串,說明已存在本地公開金鑰,您可以跳過步驟二產生 SSH 金鑰,直接操作步驟三。
步驟二:產生 SSH 金鑰
若步驟一未返回指定內容字串,表示本地暫無可用 SSH 金鑰,需要產生新的 SSH 金鑰,請按如下步驟操作:
開啟終端,運行
ssh-keygen -t。輸入密鑰演算法類型和可選的注釋。注釋會出現在
.pub檔案中,一般可使用郵箱作為注釋內容。
基於
ED25519演算法,產生金鑰組命令如下:ssh-keygen -t ed25519 -C "<注釋內容>"基於
RSA演算法,產生金鑰組命令如下:ssh-keygen -t rsa -C "<注釋內容>"
單擊斷行符號,選擇 SSH 金鑰產生路徑。
以 ED25519 演算法為例,預設路徑如下:
Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519):密鑰預設產生路徑:
/home/user/.ssh/id_ed25519,公開金鑰與之對應為:/home/user/.ssh/id_ed25519.pub。以 RSA 演算法為例,預設路徑如下:
Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa):密鑰預設產生路徑:
/home/user/.ssh/id_rsa,公開金鑰與之對應為:/home/user/.ssh/id_rsa.pub。
設定一個密鑰口令。
Enter passphrase (empty for no passphrase): Enter same passphrase again:口令預設為空白,您可以選擇使用口令保護私密金鑰檔案。如果您不想在每次使用 SSH 協議訪問倉庫時,都要輸入用於保護私密金鑰檔案的口令,可以在建立密鑰時,輸入空口令。
點擊斷行符號,完成金鑰組建立。
密鑰用於鑒權,請謹慎保管。公開金鑰檔案以 .pub 副檔名結尾,可以公開給其他人,而沒有 .pub 副檔名的私密金鑰檔案不要泄露給任何人!
步驟三:拷貝公開金鑰
除了在命令列列印出已產生的公開金鑰資訊手動複製外,可以使用命令將公開金鑰拷貝到粘貼板下,請參考作業系統使用以下命令進行拷貝:
cat ~/.ssh/id_ed25519.pub | clipMac:
tr -d '\n' < ~/.ssh/id_ed25519.pub | pbcopyGNU/Linux (requires xclip):
xclip -sel clip < ~/.ssh/id_ed25519.pub步驟四:在 Codeup 上設定公開金鑰
登入雲效,在頁面右上方單擊頭像選擇個人設定,然後選擇 SSH 公開金鑰。
添加產生的 SSH 公開金鑰資訊。
SSH 公開金鑰內容。
說明請完整拷貝本機中公開金鑰從 ssh- 開始直到郵箱為止的內容。
公開金鑰標題:支援自訂公開金鑰名稱,用於區分管理。
作用範圍:設定公開金鑰的作用範圍,包括讀寫或是唯讀,若設定為唯讀,該公開金鑰只能用於拉取代碼,不允許推送。
到期時間:設定公開金鑰到期時間,到期後公開金鑰將自動失效,不可使用。
單擊添加儲存設定,即完成 SSH 公開金鑰的設定。
常見問題
本地存在多個密鑰時,如何根據目標平台自動選擇用於認證的密鑰?
當本地存在多個密鑰,如果不設定認證規則,本機將隨機播放一個密鑰用於認證,可能造成認證失敗。
因此,在如下情境中,需要自行定義認證密鑰的路徑:
本地存在多個金鑰組應雲效的不同帳號。
本地存在多個金鑰組應不同的代碼平台(GitLab,GitHub,雲效等)。
定義認證密鑰路徑規則
開啟本地終端,按如下格式編輯~/.ssh/config檔案,如 Windows 平台請使用WSL(Windows10或以上)或 Git Bash:
# Codeup 樣本使用者1
HostName codeup.aliyun.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_ed25519
# Codeup 樣本使用者2,設定別名 codeup-user-2
Host codeup-user-2
HostName codeup.aliyun.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/codeup_user_2_ed25519
# GitLab 平台
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_ed25519按照上述配置,使用SSH協議訪問時,SSH 用戶端會使用檔案指定的密鑰進行認證,實現訪問不同平台或同一平台的不同帳號使用本地不同的 SSH 金鑰進行認證。
訪問 Codeup ,由於 HostName 一致,使用別名進行區分使用不同的密鑰。
訪問 GitLab,根據 HostName 進行區分使用不同的密鑰。
# 訪問 Codeup,將使用 ~/.ssh/id_ed25519.pub 密鑰
git clone gi*@codeup.aliyun.com:example/repo.com
# 以 codeup-user-2 別名訪問 Codeup 時,將使用 ~/.ssh/codeup_user_2_ed25519 密鑰
git clone git@codeup-user-2:example/repo.com
# 訪問 GitLab 平台,將使用 ~/.ssh/gitlab_ed25519 密鑰
git clone gi*@gitlab.com:example/repo.com