配置 SSH 密鑰
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細閱讀。
云效代碼管理 (Codeup)的倉庫支持 HTTP(S) 和 SSH 兩種訪問協(xié)議,SSH 協(xié)議可以實現(xiàn)安全的免密認證,且性能比 HTTP(S) 協(xié)議更好。本文介紹如何在 Codeup 中配置和使用 SSH 密鑰進行代碼推拉。
前提條件
在使用 SSH 協(xié)議操作代碼庫前,請生成并上傳你的 SSH 公鑰,完成 SSH 公鑰和云效賬號的對應(yīng)。
通過 SSH 協(xié)議訪問 Codeup,需要滿足如下條件。
本機已安裝 Git(安裝教程參見安裝Git)并保證版本大于 1.9(通過
git --version
可獲取本地的版本)。本機需要安裝 OpenSSH 客戶端(GNU/Linux, macOS, 或 Windows 10 已內(nèi)置 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.pub
RSA 算法
cat ~/.ssh/id_rsa.pub
如果返回一長串以 ssh-ed25519 或 ssh-rsa 開頭的字符串, 說明已存在本地公鑰,你可以跳過步驟二生成 SSH 密鑰,直接操作步驟三。
步驟二:生成 SSH 密鑰
若步驟一未返回指定內(nèi)容字符串,表示本地暫無可用 SSH 密鑰,需要生成新的 SSH 密鑰,請按如下步驟操作:
輸入密鑰算法類型和可選的注釋。注釋會出現(xiàn)在
.pub
文件中,一般可使用郵箱作為注釋內(nèi)容。
基于
ED25519
算法,生成密鑰對命令如下:ssh-keygen -t ed25519 -C "<注釋內(nèi)容>"
基于
RSA
算法,生成密鑰對命令如下:ssh-keygen -t rsa -C "<注釋內(nèi)容>"
單擊回車,選擇 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
,公鑰與之對應(yīng)為:/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
,公鑰與之對應(yīng)為:/home/user/.ssh/id_rsa.pub
。
設(shè)置一個密鑰口令。
Enter passphrase (empty for no passphrase): Enter same passphrase again:
口令默認為空,你可以選擇使用口令保護私鑰文件。如果你不想在每次使用 SSH 協(xié)議訪問倉庫時,都要輸入用于保護私鑰文件的口令,可以在創(chuàng)建密鑰時,輸入空口令。
點擊回車,完成密鑰對創(chuàng)建。
密鑰用于鑒權(quán),請謹慎保管。公鑰文件以 .pub 擴展名結(jié)尾,可以公開給其他人,而沒有 .pub 擴展名的私鑰文件不要泄露給任何人!
步驟三:拷貝公鑰
除了在命令行打印出已生成的公鑰信息手動復(fù)制外,可以使用命令拷貝公鑰到粘貼板下,請參考操作系統(tǒng)使用以下命令進行拷貝:
cat ~/.ssh/id_ed25519.pub | clip
Mac:
tr -d '\n' < ~/.ssh/id_ed25519.pub | pbcopy
GNU/Linux (requires xclip):
xclip -sel clip < ~/.ssh/id_ed25519.pub
步驟四:在 Codeup 上設(shè)置公鑰
登錄云效 Codeup 頁面,在頁面右上角選擇個人設(shè)置>SSH 公鑰。
添加生成的 SSH 公鑰信息。
SSH 公鑰內(nèi)容。
說明請完整拷貝本機中公鑰從 ssh- 開始直到郵箱為止的內(nèi)容。
公鑰標題:支持自定義公鑰名稱,用于區(qū)分管理。
作用范圍:設(shè)置公鑰的作用范圍,包括讀寫或是只讀,若設(shè)置為只讀,該公鑰只能用于拉取代碼,不允許推送。
過期時間:設(shè)置公鑰過期時間,到期后公鑰將自動失效,不可使用。
單擊添加保存設(shè)置,即完成 SSH 公鑰的設(shè)置。
常見問題
本地存在多個密鑰時,如何根據(jù)目標平臺自動選擇用于認證的密鑰?
當本地存在多個密鑰,如果不設(shè)置認證規(guī)則,本機將隨機選擇一個密鑰用于認證,可能造成認證失敗。
因此,在如下場景中,需要自行定義認證密鑰的路徑:
本地存在多個密鑰對應(yīng)云效的不同賬號。
本地存在多個密鑰對應(yīng)不同的代碼平臺(GitLab,GitHub,云效等)。
定義認證密鑰路徑規(guī)則
打開本地終端,按如下格式編輯~/.ssh/config
文件,如 Windows 平臺請使用WSL(Windows10或以上)或 Git Bash:
# Codeup 示例用戶1
HostName codeup.aliyun.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_ed25519
# Codeup 示例用戶2,設(shè)置別名 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協(xié)議訪問時,SSH 客戶端會使用文件指定的密鑰進行認證,實現(xiàn)訪問不同平臺或同一平臺的不同賬號使用本地不同的 SSH 密鑰進行認證。
訪問 Codeup ,由于 HostName 一致,使用別名進行區(qū)分使用不同的密鑰。
訪問 GitLab,根據(jù) HostName 進行區(qū)分使用不同的密鑰。
# 訪問 Codeup,將使用 ~/.ssh/id_ed25519.pub 密鑰
git clone git@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 git@gitlab.com:example/repo.com