# 使用 SSH key 連接到 remote git repositories [TOC] <STYLE> .keyboardButton { border: 1px solid #000; border-radius: 6px; cursor: default; font-family: 'Bitstream Vera Sans Mono',monospace; padding: 6px; } </STYLE> --- ## 產生密鑰 1. 將下例中**電子郵件地址**替換為 [Bitbucket](https://bitbucket.org/)、[GitCode](https://gitcode.com/)、[GitHub](https://github.com/)、[GitLab](https://gitlab.com/)、[Gitee](https://gitee.com/) 帳號或其它電子郵件地址,執行下面的指令。 ```shell ssh-keygen \ -t ed25519 \ -C 'someone@somewhere.net' ``` 應會輸出類似下面的結果: ``` Generating public/private ed25519 key pair. ``` :::info 新的 SSH 密鑰已被建立,上面指令中提供的**電子郵件地址**被作為此密鑰的 label<SUP>(標籤)</SUP>。 ::: 2. 這時 `ssh-keygen` 會詢問要保存**密鑰檔案**的**位置**。 ``` Generating public/private ed25519 key pair. Enter file in which to save the key (/Users/someone/.ssh/id_ed25519): ``` 輸入**絕對路徑**。 3. 輸入 passphrase<SUP>(密語)</SUP>兩次,或按兩次 <SPAN class="keyboardButton">Enter &#x21A9;</SPAN> 鍵跳過這個步驟。 ``` Enter passphrase (empty for no passphrase): Enter same passphrase again: ``` 應會輸出類似下面的結果: ``` Your identification has been saved in /Users/someone/.ssh/id_ed25519 Your public key has been saved in /Users/someone/.ssh/id_ed25519.pub The key fingerprint is: SHA256:UZVRLrwUEBrW8JAaf49WXSSA4PFrM51wqeMsxY5pBbQ someone@somewhere.net The key's randomart image is: +--[ED25519 256]--+ | O=+===o..| | .+.Xo..+ ..| | +E + *... | | . .+.B.+. | | S.@++ | | Xo+. | | =.+ | | . . | | | +----[SHA256]-----+ ``` :::info 示例中的 - `/Users/someone/.ssh/id_ed25519` 為**私鑰**的保存路徑。 - `/Users/someone/.ssh/id_ed25519.pub` 為**公鑰**的保存路徑。 ::: :::success 單一行指令搞定以上所有步驟: ```shell ssh-keygen \ -C 'someone@somewhere.net' \ -f /Users/someone/.ssh/id_ed25519 \ -N '' \ -t ed25519 ``` ::: ## 將 SSH 密鑰添加到 `ssh-agent` :::warning 0. [PowerShell](https://learn.microsoft.com/powershell/scripting/overview) 用戶可能須先執行: ```shell Get-Service -Name ssh-agent | Set-Service -StartupType Manual Start-Service ssh-agent ``` 貌似兩行(⁉️)指令(吧);請 [Windows&#8482;](https://www.microsoft.com/windows/) 用戶自行想辦法。 ::: 1. 在背景啟動 `ssh-agent`: ```shell eval "$(ssh-agent -s)" ``` 應會輸出類似下面的結果: ``` Agent pid 5678 ``` ### 將 passphrase<SUP>(密語)</SUP>存儲在 keychain 中 :::warning 不適用 [Windows&#8482;](https://www.microsoft.com/windows/) 用戶❗️ ::: ```shell ssh-add --apple-use-keychain ~/.ssh/id_ed25519 ``` :::info 僅 macOS 用戶須添加 `--apple-use-keychain` 引數,Linux 用戶請忽略此 argument。 ::: ### (Optional) 在本機維護多個密鑰 編輯 `~/.ssh/config`,為(每)一組密鑰建立如下內容: ``` Host github.com AddKeysToAgent yes HostName github.com IdentityFile ~/.ssh/id_ed25519 UseKeychain yes User git ``` ## 將 SSH 公鑰複製、貼上到 git repository ```shell pbcopy < ~/.ssh/id_ed25519.pub ``` ![将 SSH 公钥从剪贴板粘贴到 git repository](https://hackmd.io/_uploads/r1W5JV_2C.png)