在實際工作中我們可能同時同一個電腦中使用多個git的賬戶:github一個或多個,gitlab一個或多個賬戶,比如公司使用的是gitlab,自己寫一些組件放到github,這時就需要ssh登錄多個git賬戶了,下面使用github和gitlab做個演示
注意:
1. 本文使用【testxxx@gmail.com】作為示例帳戶
2. macbook環(huán)境當(dāng)前用戶ssh操作目錄【~/.ssh/】
3. 這里使用【RSA】認證協(xié)議,默認密鑰文件為【id_rsa】,【DSA】認證協(xié)議則默認密鑰文件為【id_dsa】
一、創(chuàng)建密鑰
GitHub:ssh-keygen -t rsa -b 4096 -C "test_github@gmail.com" -f ~/.ssh/github_me_id_rsa
GitLab:ssh-keygen -t rsa -b 4096 -C "test_gitlab@gmail.com" -f ~/.ssh/gitlab_me_id_rsa
- 這里可以不指定加密位數(shù)’-b 4096‘參數(shù)’
- ’-f file‘用來指定最終生成的密鑰文件,默認則生成’id_rsa‘和’id_rsa.pub‘兩個文件文件作為默認密鑰和公鑰使用,也就是如果不指定的話會造成文件覆蓋的問題。這里會生成新生成4個文件:
2.1 【GitHub】:github_me_id_rsa、github_me_id_rsa.pub
2.2 【GitLab】:gitlab_me_id_rsa、gitlab_me_id_rsa.pub- 這個過程會讓你設(shè)置密鑰的訪問密碼,建議設(shè)置密碼,但是要記住。。。
二、配置公鑰
把“xxx.pub”公鑰文件的完整內(nèi)容粘貼到github、gitlab中設(shè)置公鑰的地方保存即可
1. macbook環(huán)境可以使用命令復(fù)制:pbcopy < ~/.ssh/github_me_id_rsa.pub
2. 設(shè)置公鑰的地方一般位于git網(wǎng)站的 ’用戶設(shè)置/Settings‘ -> 'SSH Keys'的個人設(shè)置中
三、編寫‘config’文件
查看“~/.ssh/”目錄中有無“config”文件,沒有則“touch config”命令或者“vim config(這個命令記得保存)”創(chuàng)建該文件,然后編輯該文件(有配置文件的話在末尾新增即可):
# my GitHub
Host me.github.com
?HostName github.com
?User git
?Preferredauthentications publickey
?IdentityFile ~/.ssh/github_me_id_rsa
?#Port xxx(沒有指定端口則使用默認端口22)
# my GitLab
Host me.gitlab.com
?HostName gitlab.company.com(這里是公司真實的gitlab域名)
?User git
?Preferredauthentications publickey
?IdentityFile ~/.ssh/gitlab_me_id_rsaHost:“HostName”的別名
HostName:真實的域名,也可以是ip地址形式
User:登錄用戶
Preferredauthentications:ssh客戶端登錄時的預(yù)設(shè)認證方式,這里使用公鑰認證
IdentityFile:驗證時訪問私鑰的文件路徑
Port:端口,有的話需要指定,沒有的話可以不設(shè)置使用默認端口22
配置文件使用‘Host’字段區(qū)分不同的配置段落
四、配置登錄測試
4.1 拿【GitHub】舉例來說:
ssh -T <Host>: ssh -T me.github.com
它會查找并使用匹配‘Host’字段區(qū)域的配置
1. 這里使用的是配置的別名‘me.github.com’,如果創(chuàng)建密鑰時設(shè)置了密碼就會提示輸入密鑰的密碼,如本例:“Enter passphrase for key '/Users/xxx/.ssh/github_me_id_rsa‘:
這里輸入密碼”
2. 使用這個別名就會轉(zhuǎn)換成ssh -T User@Hostname -p Port,即:ssh -T git@github.com -p 22,并且使用配置文件中【IdentityFile】指定的密鑰文件【github_me_id_rsa】,并輸入訪問該密鑰文件的密碼(如果存在的話)
連接成功則提示如下:
Hi xxx(你的github用戶名)! You've successfully authenticated, but GitHub does not provide shell access.(【GitLab】:Welcome to GitLab, @xxx!)
注意:如果配置文件沒有指定【IdentityFile】或者設(shè)置了別名但是沒有使用別名訪問,會訪問默認密鑰文件【id_rsa】。如果【id_rsa】不存在或連續(xù)三次輸入錯誤的密碼則會提示:Permission denied (publickey).
4.2 如何自動登錄
到此為止,每次訪問都會輸入密鑰的密碼,因此需要將專屬密鑰添加到【ssh-agent】的高速緩存中:
ssh-add <密鑰文件>:ssh-add ~/.ssh/github_me_id_rsa
如果密鑰有密碼的話,會提示輸入密碼
- 從ssh-agent中刪除指定密鑰:
ssh-add -d ~/.ssh/github_me_id_rsa.pub- 查看ssh-agent中的密鑰:
ssh-add -l- 清空ssh-agent中的密鑰:
ssh-add -D
注:添加到【ssh-agent】也并非是永久性的,如果【ssh-agent】服務(wù)重啟的話管理密鑰的session也就不存在了
五、遠程倉庫的變化
拿【GitHub】舉例
5.1 克隆項目
原來:git clone git@github.com:xxx_yyy.git
現(xiàn)在:git clone git@me.github.com:xxx_yyy.git
5.2 已有項目
現(xiàn)狀:現(xiàn)有的項目已經(jīng)在使用中。。。
- 直截了當(dāng)?shù)姆绞剑涸陧椖?strong>【.git】目錄中找到【config】文件,直接編輯該文件:
找到 -> [remote "origin"]段落
修改 -> url = git@me.github.com:xxx_yyy.git
如果使用的Git客戶端,可以在遠程倉庫配置中修改
- 命令行修改
git remote set-url origin git@me.github.com:xxx_yyy.git