Git多個SSH KEYS解決方案(含windows自動化、TortoiseGit、SourceTree等)

工做過程當中,常常會使用到多個git倉庫,每一個git倉庫對應一個帳號,能夠理解爲每一個git倉庫對應一個ssh key,所以咱們須要管理多個ssh key。
 
1、快速建立ssh key
 
1. 建立SSH keys:

mkdir -p ~/.ssh
ssh-keygen -t rsa  -C "your_email@example.com" -f .ssh/id_rsa_xxx

2. 添加存在的SSH keys:
第一步,啓動ssh-agent環境:
Git Bash:

 # start the ssh-agent in the background
eval "$(ssh-agent -s)"
Agent pid 59566

其它終端:

# start the ssh-agent in the background 
eval $(ssh-agent -s)
Agent pid 59566

第二步:

#id_rsa指你存在的private ssh key,如名爲"id_rsa_git"

ssh-add ~/.ssh/id_rsa

3. 測試ssh配置
藉助github測試,需先把ssh publish key添加到github帳號:https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

#建議開啓v,輸出詳細信息。i表明你的私鑰路徑。
ssh -i ~/.ssh/id_rsa_git -vT git@github.com
結果以下:

#省略debug輸出
Hi your_email@example.com! You've successfully authenticated, but GitHub does not provide shel
l access.

 
注意 : ssh-add 這個命令不是用來永久性的記住你所使用的私鑰的。實際上,它的做用只是把你指定的私鑰添加到 ssh-agent 所管理的一個 session 當中。而 ssh-agent 是一個用於存儲私鑰的臨時性的 session 服務,也就是說當你重啓以後,ssh-agent 服務也就重置了。
 
 
2、多個ssh keys解決方案
1. 在~/.ssh目錄建立config,配置config管理多個ssh keys。

touch ~/.ssh/config

內容以下:

#github網站使用User=git
Host github
     HostName github.com
     User git
     IdentityFile ~/.ssh/id_rsa_git
 
#code.csdn網站
Host code.csdn.net
     HostName code.csdn.net
     User csdn
     IdentityFile ~/.ssh/id_rsa_csdn

2. windows配置ssh-agent隨GIT BASH啓動
因爲priavte key不是默認名字id_rsa,所以每次打開git bash須要重複執行ssh-agent,ssh-add,而後再進行ssh操做,比較麻煩,所以咱們經過腳本實現自動化。
參見:https://help.github.com/articles/working-with-ssh-key-passphrases/#auto-launching-ssh-agent-on-msysgit
在~目錄建立.profile:

touch ~/.profile

# 複製下面腳本到~/.profile

# Note: ~/.ssh/environment should not be used, as it
#       already has a different purpose in SSH.
 
env=~/.ssh/agent.env
 
# Note: Don't bother checking SSH_AGENT_PID. It's not used
#       by SSH itself, and it might even be incorrect
#       (for example, when using agent-forwarding over SSH).
 
agent_is_running() {
    if [ "$SSH_AUTH_SOCK" ]; then
        # ssh-add returns:
        #   0 = agent running, has keys
        #   1 = agent running, no keys
        #   2 = agent not running
        ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]
    else
        false
    fi
}
 
agent_has_keys() {
    ssh-add -l >/dev/null 2>&1
}
 
agent_load_env() {
    . "$env" >/dev/null
}
 
agent_start() {
    (umask 077; ssh-agent >"$env")
    . "$env" >/dev/null
}
 
if ! agent_is_running; then
    agent_load_env
fi
 
# if your keys are not stored in ~/.ssh/id_rsa or ~/.ssh/id_dsa, you'll need
# to paste the proper path after ssh-add
if ! agent_is_running; then
    ssh-add
    agent_start
    #指定你的多個keys,每一個一行。如:ssh-add ~/.ssh/id_rsa_git
elif ! agent_has_keys; then
    ssh-add
 
    #指定你的多個keys,每一個一行。如:ssh-add ~/.ssh/id_rsa_git
fi
 
unset env

從新打開GIT BASH,看到以下信息:

bash: /c/Users/xxx/.ssh/agent.env: No such file or directory
Identity added: /c/Users/xxx/.ssh/id_rsa_git (/c/Users/xxx/.ssh/id_rsa_git)
Identity added: /c/Users/xxx/.ssh/id_rsa_csdn (/c/Users/xxx/.ssh/id_rsa_git)

查看進程"ssh-agent"已運行後,打開GIT BASH:

ssh -vT git@gitlab.alibaba-inc.com

看到相似結果(有裁剪):

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /c/Users/xxx/.ssh/id_rsa_git
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access. 

至此,Windows環境Git管理多個SSH KEYS完成,Linux/MAC等*unix相似。
 
3、TortoiseGit/SourceTree配置
TortoiseGit是常見的GIT GUI工具,它使用ppk。
 
1. 打開TortoiseGit/PuTTYgen,並加載以前生成好的ssh private key(如~/.ssh/id_rsa_git)。
e293b6cb07d9a4ee18191d00bdec14c2966c422d
 
2. 點擊"save private key"保存爲ppk文件。
3. 打開TortoiseGit/Pageant,點擊"Add key"添加上面生成的ppk文件。
213fbcfd78807b1369ab6bc6abe6c887b1b0fd94
 
可使用TortoiseGit代替GIT BASH操做github、gitlab等東東了。
 
SourceTree與TortoiseGit操做方案相似,不一樣的是操做頁面不同。
 
4、其餘ssh key注意事項
~/.ssh目錄在*unix權限爲700:chmod 700 ~/.ssh,在windows不須要。
 
對於指定私鑰,設置密碼:
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
相關文章
相關標籤/搜索