git pull或push不用再打密碼

2018/03/18 posted in  Git comments

快速設置Git,以後git pull git push都不用再打帳號密碼了。

首先要分辨你的git connection是屬於哪一種:

git_clone

按下綠色button後預設是用https,再按"Use SSH"才會是ssh。


1. Connecting over HTTPS (password caching)

例如: git clone https://github.com/{username}/{repo name}.git

設置步驟(Mac):

  1. 查看有沒有安裝osxkeychain helper: git credential-osxkeychain

    如果沒有可以用brew安裝: brew install git

  2. git config --global credential.helper osxkeychain

然後下次需要輸入時就可以把username和password都存到keychain,下次就不用再打帳號密碼了。

想移除的話只要git credential-osxkeychain erase就可以了。

無法移除可以參考這裡

References:

Mac以外的系統看這裡

不建議的做法:git remote set-url origin https://name:password@github.com/repo.git

這樣你的密碼會以plain text形式儲存在電腦。


2. Connecting over SSH (deploy keys)

例如: git clone git@github.com:{username}/{repo name}.git

設置步驟(Mac):

1. 創建ssh用的key

先檢查原本機內有沒有ssh key

ls -al ~/.ssh

如果發現id_rsa.pub可以跳過這步驟。

ssh-keygen -t rsa -b 4096 -C "xxx@xxx.com" # 換成你的Github account
Enter a file in which to save the key (/Users/xxx/.ssh/id_rsa): # 把enter按下去就是了
Enter passphrase (empty for no passphrase): # 可不填,這是用來加密你的private key讓其不會plain text地儲存在電腦

現在應該會有兩個新檔案:

  • ~/.ssh/id_rsa: private key
  • ~/.ssh/id_rsa.pub: public key

2. 把ssh key加到ssh-agent

當你的repo link是git@github.com:...,每次git pullgit push之類的時候都會動用到ssh-agent。

  1. 在背景開啟ssh-agent: eval "$(ssh-agent -s)"
  2. 更改~/.ssh/config:

    Host *
    AddKeysToAgent yes
    UseKeychain yes
    IdentityFile ~/.ssh/id_rsa
  3. ssh-add -K ~/.ssh/id_rsa

    -K代表Store passphrases in your keychain.

(如果設置了passphrase而沒有跟隨以上步驟,每次動用ssh的時候都會需要輸入一次passphrase。)

References:

passphrase問題

Mac以外的系統看這裡

3. 到Github加入你的public key

  1. 複製~/.ssh/id_rsa.pub檔的內容: pbcopy < ~/.ssh/id_rsa.pub
  2. 到Github repo setting加入新Deploy key
    • Title只是用來分辨的名稱
    • Key就是剛才複製的的public key

git_deploy_key

References:

Mac以外的系統看這裡


Github官方英文教學