關於 SSH 的部份可以看到 [IS] 關於 SSH 一文了解
準備帳號
Gmail | GitHub 帳號代稱名 | Mac 金鑰帳號名 | 金鑰密碼 |
---|---|---|---|
main@gmail.com | main | id_rsa_main | 金鑰密碼可留空 |
work@gmail.com | work | id_rsa_work | 金鑰密碼可留空 |
主分為 main 的主要帳號與測試或工作用的 work 帳號。
使用者帳號下的 .ssh 資料夾內的相關設定
如果在使用者帳號中,沒有 .ssh 資料夾,手動建立就好,這主要用於集中放置 SSH 設定的地方。建立私鑰與公鑰
Mac Finder 使用快速鍵 command + G,輸入 ~/.ssh 後前往到路徑下。 另外也開啟終端機移到 .ssh 指定路路徑上 cd ~/.ssh。 main 帳號在 .ssh 資料夾裡,終端機輸入指令1 | ssh-keygen -t rsa -C "main@gmail.com" |
1 2 | Generating public/private rsa key pair. Enter file in which to save the key (/Users/jimmy/.ssh/id_rsa): |
1 2 | Enter passphrase (empty for no passphrase): Enter same passphrase again: |
1 | ssh-keygen -t rsa -C "work@gmail.com" |
1 2 3 | // 指令輸入後會提示 Generating public/private rsa key pair. Enter file in which to save the key (/Users/jimmy/.ssh/id_rsa): |
公私鑰一定要在 ~/.ssh 路徑下操作 如果沒將 ssh 加入連結本機帳密,每次只要使用透過 SSH 通道來輸入指令 git push 時都會在問一次金鑰密碼。
取得或複製 SHA256 公鑰的內容
在建好公私鑰後,可以直接開啟檔案後面副檔名為 .pug 格式檔來操作, id_rsa_main.pub 與 id_rsa_work.pub (使用文字編輯或是像 VSCode 的 IDE 軟體來取得裡面的 SHA256 的內容),另外也可以使用終端機指令 ssh -T <公鑰檔名> 來取得 SHA256 內容。1 2 | ssh -T github.com ssh -T github-work |
1 2 3 | The authenticity of host 'github.com (xxx.xxx.xxx.xxx)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are you sure you want to continue connecting (yes/no)? |
1 | 'github.com(xxx.xxx.xxx.xxx)'主機的真實性不能被建立。 RSA密鑰指紋是SHA256:nthbg6kxupjwgl7e1igocspromtxdcarlvikw6e5sy8。你確定要繼續連接(是/否)? |
1 | Enter passphrase for key '/Users/jimmy/.ssh/id_rsa_main': |
1 | Hi id_rsa_main! You've successfully authenticated, but GitHub does not provide shell access. |
公鑰內容加入對應的 GitHub 帳號設定中
GitHub 頁面並登入後,點開最右方的選單選到 Settings。 到右方次選單點 SSH and GPG keys 選 SSH keys 的 New SSH key 按鈕,macOS 使用者可直接透過 terminal 進行複製 pbcopy < ~/.ssh/id_rsa_<公鑰名稱>.pub。 Title 打上一個提供辨識的名稱即可,Key 輸入框內貼入剛剛複製的 KEY 然後點擊 Add Key 即可,點後 GitHub 會要求在輸入一次登入的密碼確任設定。設定 .ssh 資料夾裡的 config
在 ~/.ssh 目錄底下建立一個名稱為 config 的檔案,主要是用來針對變數在輸入 SSH 指令時,可以用來做轉案帳號的動作。 開啟檔案後加入下面內容1 2 3 4 5 6 7 8 9 10 11 | # 預設帳號 (個人帳號) Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa_main # 測試帳號 Host github-work HostName github.com User git IdentityFile ~/.ssh/id_rsa_work |
特別注意到 Host 的 github.com 與 github-work 二個部份,之後輸入指令時所切換帳號所使用的變數名稱。 IdentityFile ~/.ssh/<SSH kes 檔案名稱> 區分,可自行命名。
SSH 連線與更新 SSH 設定
加入 SSH 的金鑰密碼,使用變數呼叫 SSH 帳號後,不在提問 SSH 金鑰密碼
使用指令 ssh-add 將金鑰密碼加入,完成加入金鑰密碼後在 SSH 通道使用 GitHub 或是 git 的指令,就不會一直提問金鑰密碼。1 2 3 | ssh-add id_rsa_main ssh-add id_rsa_work // 如有其他 key 在這裡繼續加入 .... |
查看 SSH 金鑰 key 是不是都加入了
1 | ssh-add -l |
測試 ssh 是否連結成功
1 2 3 | ssh -T id_rsa_main // main@github.com: Permission denied (publickey). // 沒有權限指的就是沒加入成功 |
1 2 3 | ssh -T id_rsa_work // Hi id_rsa_work! You've successfully authenticated, but GitHub does not provide shell access. // 加入成功 |
清除 SSH 帳密舊設定
1 | ssh-add -D |
GitHub 帳號透過 SSH 金鑰更換相關設定
設定 Repository 不同身份
依據需求來指定不同 Repository 的身份,可以全域下的 GitHub 帳號區隔開,在專案資料夾裡的區域設定特定的使用者帳號。若要設定專案中的區域使用者,在 git init 時就需要先設定 name 與 email,在第一次嵌入 git commit 前就需要先設定完成,不然使用 git commit 也還會是全域的使用者。 心之聲:廢話,那是全域的使用者推的 commit 呀…
1 2 3 | [user] name = username email = your@email.com |
1 2 | git config user.name "username" git config user.email "your@email.com" |
設定網址
git clone 設定
1 | git clone git@<<SSH 金鑰變數使用者帳號>>:<<GitHub 帳號名>>/<<repos 專案名稱>>.git |
- <<GitHub 帳號名>> 在 GitHub 預設的名稱為 github.com ,針對這預設的部份透過變數操作。
- <<SSH 金鑰變數使用者帳號>> 為 SSH 所取代的變數帳號名,用來指定要操作 Git 指定帳號,例如果如要使用 github-work 帳號,就輸入成 git clone git@github-work:<<GitHub 帳號名>>/<<repos 專案名稱>>.git。
- : 路徑字符後都為 GitHub 的 repos 特定路徑,在 GitHub 開啟專案名稱後就會對應產生,例如是在 main 帳號下開一個 new_repos ,而就會成為 :main/new_repos.git。
GitHub 遠端主機設定
比對 git clone 設定方式,將 <<SSH 金鑰變數使用者帳號>> 與 : 路徑字符後的 GitHub repos 對應路徑比照更換。1 2 3 | [remote "origin"] url = git@github-work:main/new_repos.git fetch = +refs/heads/*:refs/remotes/origin/* |
此方法不限於使用在 GitHub,也不限於用在 Git