http://www.reibang.com/p/3fc93c16ad2d
創(chuàng)建日期:2020年4月6日
系統(tǒng)版本:macOS Mojave(V10.14.6)
本篇,Windows系統(tǒng)的電腦也通用粉私,僅有一個linux的命令彼水,需要自己調查。
1.創(chuàng)建SSH密鑰
1.1 查看本機是否存在SSH keys,
$ ls ~/.ssh/
沒有募舟,則繼續(xù)下一步袒啼;如果存在宛畦,則跳到【3.在GitHub賬戶中添加你的公鑰】。
1.2 創(chuàng)建一對新的SSH密鑰(keys)
$ssh-keygen -t rsa -C "your_email@example.com"
運行后虑鼎,將按照你提供的郵箱辱匿,創(chuàng)建一對密鑰,控制臺出現(xiàn)的信息:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/userName/.ssh/id_rsa):
直接回車炫彩,則將密鑰按默認文件進行存儲匾七。此時也可以輸入特定的文件名,比如/c/Users/you/.ssh/github_rsa江兢。直接回車后昨忆,會要求你輸入密碼:
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
接著,根據提示杉允,你需要輸入密碼和確認密碼(說到這里邑贴,如果你很放心,其實可以不用密碼叔磷,就是到輸密碼的地方拢驾,都直接回車,所以每次push就只管回車就行了改基。所謂的最安全的密碼繁疤,就是沒有密碼 – – 哈哈)。密碼設置完后秕狰,回車稠腊,會出現(xiàn)如下信息:(該圖是從設置密鑰開始的截圖)
版本不同,可能出現(xiàn)的答案也不同鸣哀,總之架忌,沒有出現(xiàn)錯誤提示,應該就是成功了我衬。
1.3 在GitHub賬戶中添加你的公鑰
運行如下命令叹放,將公鑰的內容復制到系統(tǒng)粘貼板(clipboard)中饰恕。
$ pbcopy < ~/.ssh/id_rsa.pub
#上面命令是Mac下的命令,windows方法相同许昨,但是此命令不同
接著:
(1) 登陸GitHub,進入你的Account Settings.
點擊你的頭像懂盐,選擇Settings,進入設置界面
(2) 在左邊菜單糕档,點擊”SSH and GPG keys”。
(3) 點擊”New SSH key”按鈕.
(4) 粘貼你的密鑰到key輸入框中,點擊"Add SSH key"按鈕
(5) 再彈出窗口拌喉,輸入你的GitHub密碼速那,點擊確認按鈕。
(6) 到此尿背,大功告成了端仰!
1.4 測試
為了確認我們可以通過SSH連接GitHub,我們輸入下面命令田藐。輸入后荔烧,會要求我們提供驗證密碼,輸入之前創(chuàng)建的密碼就ok了汽久。
$ ssh -T git@github.com
你可能會看到告警信息鹤竭,如下:
1.The authenticity of host 'github.com (207.97.227.239)' can't be established.
2.RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
3.Are you sure you want to continue connecting (yes/no)?
不用擔心,直接輸入yes景醇。
如果看到下面信息臀稚,就說明一切完美!
Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.
【注意】
如果前面沒有將生成的密鑰存放在默認的文件id_rsa中(而是my_rsa中),那么ssh -T git@github.com
命令就需要添加參數來執(zhí)行三痰。如下:
$ ssh -T -i my_rsa git@github.com
以上參考使用SSH密鑰連接Github吧寺。
2、單機如何控制不同的SSH Keys連不同的Git環(huán)境?
其實散劫,一套SSH密鑰是可以用在不同的SSH環(huán)境的.
但是如果由于某種要求稚机,需要用不同的SSH密鑰連接不同的Git環(huán)境。假設具體場景是获搏,已經建了密鑰github_rsa赖条,還需要創(chuàng)建work_rsa連接工作環(huán)境git倉庫,那么颜凯,可以按下面操作進行:
2.1 創(chuàng)建第2個密鑰
生成新的公鑰谋币,并命名為 id_rsa_2
(保證與之前密鑰文件名稱不同即可)
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa_2 -C "yourmail@xxx.com"
注意:這個郵箱是你另一個賬戶的郵箱。
2.2 創(chuàng)建config配置文件
在 .ssh
文件夾下新建 config
文件并編輯症概,
$ cd .ssh
$ vi config
(按i鍵蕾额,進入編輯模式。不了解vi編輯器的可以找到config的路徑彼城,用工具打開該文件诅蝶,可視化編寫)
另不同 Host 實際映射到同一 HostName
退个,但密鑰文件不同。Host 前綴可自定義调炬,例子中ieit
# default
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# two
Host ieit.github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_2
(按esc语盈,再輸入:wq
退出vi編輯器)
2.3 在GitHub賬戶中添加公鑰
將生成的 id_rsa_2.pub
,id_rsa_2.pub
內容copy 到對應的 github中缰泡,參考【1.3 在GitHub賬戶中添加你的公鑰】刀荒。
如果你是從第一步開始跟下來的,那么我們現(xiàn)在只要設置另一個github賬戶的SSH key即可棘钞。
將第二個賬戶的公鑰內容復制到系統(tǒng)粘貼板上:
$ pbcopy < ~/.ssh/id_rsa_2.pub
2.4 測試 ssh 鏈接
ssh -T git@ieit.github.com
ssh -T git@github.com
# Hi IEIT! You've successfully authenticated, but GitHub does not provide shell access.
# 出現(xiàn)上邊這句缠借,表示鏈接成功。
(我第一次ieit用的自定義的大寫字母宜猜,報錯了泼返,后來我把整個config文件copy過去,ieit用小寫的自定義信息代替姨拥,成功了绅喉。因為在設置第二個賬戶的時候,我加了密碼叫乌,因此會要求你輸入密碼柴罐。)
3、實際操作:建立本地倉庫综芥,關聯(lián)遠程倉庫
(1) 將項目 clone
到本地丽蝎, folder-name
是本地文件夾路徑
git clone git@github.com:whatever folder-name
(2) 取消全局 用戶名/郵箱設置,并進入項目文件夾單獨設置
# 取消全局 用戶名/郵箱 配置
git config --global --unset user.name
git config --global --unset user.email
# 單獨設置每個repo 用戶名/郵箱
git config user.email “xxxx@xx.com”
git config user.name “xxxx”
(3) 命令行進入項目目錄膀藐,重建 origin
對克隆下來的文件屠阻,進行修改,如果可以push额各,則可以忽略此步驟国觉。
git remote rm origin
git remote add origin git@ieit.github.com:whatever
【注意】
-
whatever
為相應項目地址,并且要是SSH項的地址,而非HTTPS的虾啦。如果誤用了HTTPS的地址麻诀,可能會提示如下錯誤:
fatal: 不支持 'git@ieit.github.com:https' 協(xié)議
- 在粘貼
whatever
項時,一定要看好路徑傲醉,github上蝇闭,是帶有git@github.com:
這一項的,我們要用config文件里對應的含前綴的那個硬毕,whatever
就是這一項后面那部分呻引。如果不小心,把這部分整體作為whatever使用的話吐咳,會提示如下錯誤:
Enter passphrase for key '/Users/username/.ssh/id_rsa_2':
fatal: 遠程錯誤:
is not a valid repository name
Email support@github.com for help
(4) 成功逻悠,可以 push 測試一下
git push origin master
之后元践,你可以按照上面方法,或者你熟悉的方法去設定其他賬戶關聯(lián)的本地倉庫童谒。這里单旁,主要注意的就是,取消全局git賬戶饥伊,然后在每個倉庫中象浑,配置自己對應倉庫的user.email和user.name。
第二個賬戶的測試
上面的8,9趋距,我都沒有運行。原本第一個賬戶的代碼越除,刪除全局用戶名/郵箱节腐,改成單個項目里設置,沒有push代碼摘盆,但是pull代碼翼雀,沒有問題。
我從github上用git clone拉取公司項目的時候孩擂,只在第一次要求我輸入賬戶和密碼狼渊。之后都是好用的。我用同樣的方法类垦,拉取私人賬戶創(chuàng)建的倉庫是狈邑,push的時候,一直提示權限問題蚤认。在設置ssh的時候米苹,私人賬戶設置了密碼,但是砰琢,應該與這個無關蘸嘶。于是,按照github上以及8陪汽,9的命令训唱,又來了一次:
(1)在本地新建文件夾,進入該文件夾挚冤,運行下面的命令:
$ git init
# 往該文件夾里况增,拖入一個文件,我是用vi新建了一個README.md文件
$ git add .
$ git commit -am "first commit"
到此你辣,有下面提示:
因為我們用兩個賬戶巡通,肯定不能設置全局的尘执,先用命令看看當前的賬戶是什么
$ git config user.email
運行后,什么都不顯示宴凉,說明我們并沒有設置誊锭,現(xiàn)在開始設置郵箱和用戶名:
$ git config user.name "Your Name"
$ git config user.email you@example.com
$ git remote add origin git@ieit.github.com:whatever
#記得把ieit換成你在config中設置的那個值
然后push,之后又出現(xiàn)了error:
fatal: 不支持 'git@ieit.github.com:https' 協(xié)議
調查后弥锄,說粘貼github的倉庫地址時丧靡,用SSL的,不要用HTTPS的籽暇。重新運行之前的命令温治,會提示“git@github.com:ieit/aaaaaa.git”
于是,我們將上面的步驟再進行一次戒悠。待到push的時候熬荆,又出錯了:
Enter passphrase for key '/Users/username/.ssh/id_rsa_2':
fatal: 遠程錯誤:
is not a valid repository name
Email support@github.com for help
這個是命令錯了。仔細觀察绸狐,從一開始卤恳,使用SSH的url的時候,就一直用錯了寒矿,要粘貼git@github.com:
后面的那段突琳,因為前面這段我們已經變成config文件中自定義的git@ieit.github.com:
,因為沒仔細看,折騰了好久符相。至此拆融,終于成功了。
至此啊终,我們直接clone的镜豹,應該也是可以,只是中途我填錯了url而已孕索。
另外逛艰,作者出現(xiàn)了gitignore沒有該文件,確無法push的問題搞旭。最后解決的方案是把那個文件夾拖出散怖,然后push到遠程,再重新創(chuàng)建同名文件夾肄渗,將拖出的文件件的內容copy到新建立的文件夾镇眷,然后重新push。成功翎嫡!