# 一台電腦使用多個 Git 帳號 (SSH 金鑰) ## 前言 新公司專案感覺會時常使用 git,主要是想在若有緊急情況時,希望在家中也有辦法處理公司的事,剛好目前還在熟悉環境手邊暫時沒有排專案,就在公司電腦試了一下。 ## 目標 在同一台電腦上,公司 github 帳號可以管理公司專案、私人 github 帳號可以管理私人專案 ## 產生不同的金鑰 執行以下命令,Email 記得更換 ``` $ ssh-keygen -t rsa -C "username@example.com" ``` 接下來應該會跳出下方的訊息 ``` Enter file in which to save the key (/Users/user/.ssh/id_rsa): ``` 於訊息冒號後輸入金鑰名稱,輸入完後會跳出要你輸入驗證密碼的訊息,若不想設定按 Enter 跳過即可 ``` Enter passphrase (empty for no passphrase): [輸入驗證密碼] Enter same passphrase again: [再輸入一次同樣的驗證密碼] ``` 因為我有兩個帳號,所以這個步驟會重複兩次,金鑰名稱分別為 id_rsa_company 和 id_rsa_personal ``` ~/.ssh/id_rsa_company ~/.ssh/id_rsa_personal ``` 查看目前管理的金鑰 ``` $ ssh-add -l ``` 因為我亂試了一段時間,列出來的金鑰有點混亂,所以我執行下方這段將舊的都先清除 ``` $ ssh-add -D ``` 將金鑰加入 ssh-agent ``` $ ssh-add ~/.ssh/id_rsa_company $ ssh-add ~/.ssh/id_rsa_personal ``` 最後再執行一次,看剛剛的金鑰是否有加入成功 ``` $ ssh-add -l ``` ## 修改 SSH Config 分別執行下面三段命令 ``` $ cd ~/.ssh/ $ touch config $ open config ``` config 打開後開始編輯內容 ``` #公司帳號 Host github-company HostName github.com User git IdentityFile ~/.ssh/id_rsa_company #私人帳號 Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_rsa_personal ``` ## Github 新增 SSH 金鑰 輸入下面指令可以複製公開金鑰的內容,再將它們貼回 Github 即可 ``` pbcopy < ~/.ssh/id_rsa_personal.pub pbcopy < ~/.ssh/id_rsa_company.pub ``` ## 測試連線 輸入指令 ``` $ ssh -T git@[輸入剛剛 config 內 Host 後方接的名稱] ``` 依照前面的設定指令會是下面這樣 ``` $ ssh -T git@github-company $ ssh -T git@github-personal ``` 成功的話應該會跳出下面的訊息 ``` Hi [Username]! You've successfully authenticated, but GitHub does not provide shell access. ``` ## Clone repo 和 修改 Git config 執行下面命令就能將 repo clone 下來,私人專案在公司也能成功 push 上去 ``` $ git clone git@github-personal:personal/project.git ``` 若 repo 早已經 clone 下來的話,打開專案資料夾內 `/.git/config` 然後修改 `[remote "origin"]` 下方的 url 即可,範例如下 ``` [remote "origin"] url = git@github-personal:personal/project.git fetch = +refs/heads/*:refs/remotes/origin/* ``` ## 設定 User 資料 ``` $ git config user.name "Brent Hsieh" $ git config user.email "personal@example.com" ``` ## 參考資料 https://gist.github.com/jexchan/2351996 https://medium.com/@hyWang/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%80%E5%8F%B0%E9%9B%BB%E8%85%A6%E4%BD%BF%E7%94%A8%E5%A4%9A%E5%80%8Bgit%E5%B8%B3%E8%99%9F-907c8eadbabf https://kejyuntw.gitbooks.io/ubuntu-learning-notes/content/network/network-multiple-ssh-key-to-same-github-site.html ###### tags: `git` `ssh`