工做過程當中,常常會使用到多個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)
#id_rsa指你存在的private ssh key,如名爲"id_rsa_git"
ssh-add ~/.ssh/id_rsa
3. 測試ssh配置
#建議開啓v,輸出詳細信息。i表明你的私鑰路徑。
結果以下:
#省略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。
內容以下:
#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
# 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)。
2. 點擊"save private key"保存爲ppk文件。
3. 打開TortoiseGit/Pageant,點擊"Add key"添加上面生成的ppk文件。
可使用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]