--- title: SSH Key設定 tags: SSH, git --- # SSH Key設定 ###### tags: `SSH`, `git` > 資料來源:[【Git】使用 SSH 金鑰與 GitHub 連線](https://cynthiachuang.github.io/Generating-a-Ssh-Key-and-Adding-It-to-the-Github/) SSH設置步驟如下: 1. 產生金鑰對 2. 將Public key放到遠端資料庫(例:Github) </br> ## 產生金鑰對 將金鑰放置在 `~/.ssh` 目錄下,若目錄不存在就自己建一個,並設定好權限 ```bash $ mkdir ~/.ssh $ chmod 700 ~/.ssh ``` 使用 `ssh-keygen` 指令產生金鑰 :::spoiler 在windows,若 `ssh-keygen` 無法開啟 > 按 `win+r` 輸入 `services.msc` >  > 找到openssh將它改為**自動** >  ::: <br> - 加密演算法:ED25519 ```bash $ ssh-keygen -t ed25519 -C "your_email@example.com" Generating public/private ed25519 key pair. ``` 由於 `ED25519` 為後來推出的加密演算法,若系統不支援可以改用 `rsa` - 加密演算法:rsa ```bash $ ssh-keygen -t rsa -b 4069 -C "your_email@example.com" ``` > `ssh-keygen` 常用參數: > `-t`:指定金鑰的加密演算法,預設使用 `SSH2d` 的 `rsa`。 > `-f`:指定金鑰的檔名,預設檔名會隨演算法而變動,例如使用 rsa 加密時,其檔名預設為 `id_rsa`(私鑰`id_rsa`,公鑰`id_rsa.pub`)。這階段沒改沒關係,等等還會在詢問。 > `-P`:提供舊密碼,空表示不需要密碼(`-P` ‘’) > `-N`:提供新密碼,空表示不需要密碼(`-N` ‘’) > `-b`:指定金鑰長度(bits)。 > `-C`:提供一個新標籤。 產生金鑰過程中會問下列問題: ``` Enter file in which to save the key (/home/username/.ssh/id_ed25519): /home/username/.ssh/github_key Enter passphrase (empty for no passphrase): Enter same passphrase again: ``` 第 1 個問題在問金鑰的儲存位置與檔名,若不要使用預設檔名的話,要再記得設定 `config`檔,以免後續連線測試時使用預設檔名 第 2 跟 3 個問題則是詢問是否指定金鑰保護密碼,若有設定密碼的話,之後使用每次使用時,這把金鑰時就要輸入密碼,因此請務必牢記,不然這把金鑰就廢了 XDDD 如果之後想修改金鑰密碼的話,可以透過 ssh-keygen 來設定。 :::spoiler **`config` 設定** 新增檔案 ``` vim ~/.ssh/config ``` 在檔案中加入下列內容 ``` Host github.com HostName github.com User [your name] IdentityFile ~/.ssh/github_key ``` ::: ## 設定金鑰代理 設定金鑰代理 這個步驟是給有設定金鑰密碼的人,如果你有設定密碼,但又不想每次使用金鑰就要輸入一次,你可以考慮設定金鑰代理: ``` $ eval "$(ssh-agent -s)" $ ssh-add ~/.ssh/github_key ``` 如果你沒有設定密碼,或是像我一樣不想起一個 agent 在背景跑,寧願每次輸入密碼的,可以跳過這個步驟。 ## 新增公鑰到遠端資料庫 檢視並複製生成的公鑰: ``` $ cat ~/.ssh/github_key.pub ssh-ed25519 ........ your_email@example.com ``` 登入GitHub,點選頭像 -> `Settings` -> `SSH and GPG keys` -> `New SSH key` ## 連線測試 完成金鑰上傳後,驗證下這組金鑰是不是正常工作,如果一切正常,應該會看到下面的訊息: ``` $ ssh -T git@github.com Hi XXX! You’ve successfully authenticated, but GitHub does not provide shell access. ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up