生成SSH Key
生成SSH KEY:
ssh-keygen -t rsa -C "your_email@example.com"
, 然后會(huì)提示輸入公鑰的名字, 如果你需要多個(gè)SSH-KEY(比如有多個(gè)github帳號(hào))就需要在命名的時(shí)候區(qū)分一下,比如輸入"/home/chen/.ssh/xyz_rsa"這樣的名字鄙煤,這樣在/home/chen/.ssh/文件夾下生成兩個(gè)文件: xyz_rsa.pub和xyz_rsa, 分別是你的公鑰和私鑰.生成SSH KEY的時(shí)候還要求輸入私鑰密碼"│Enter passphrase (empty for no passphrase):"墙杯, 請(qǐng)記住私鑰的密碼匣吊, 下面導(dǎo)入私鑰的時(shí)候要用到匈睁。
將SSH 私鑰增加到ssh-agent:
ssh-add ~/.ssh/xyz_rsa
桶蛔, 這里會(huì)提示輸入一次私鑰的密碼;查看已經(jīng)add的SSH KEY:
ssh-add -l
吸祟;安裝xclip(終端到剪切板的工具):
sudo yum install xclip
, 將公鑰內(nèi)容拷貝到剪切板:xclip -sel clip < ~/.ssh/id_rsa.pub
;瀏覽器登錄自己的github頁面, 進(jìn)入"Account Settings", 再點(diǎn)擊左邊的"SSH Key"可以看到自己上傳過的SSH公鑰列表. 再點(diǎn)擊"Add SSH Key"新增一個(gè)公鑰, 直接粘貼即可(上一步已經(jīng)使用xclip把公鑰id_rsa.pub復(fù)制到剪切板了)瑟慈;
測試SSH Key登錄
- 打開終端, 測試:
ssh -T git@github.com
;
你可能會(huì)看到下面的錯(cuò)誤信息:
Agent admitted failure to sign using the key.
debug1: No more authentication methods to try.
Permission denied (publickey).
上面的錯(cuò)誤在某些Linux發(fā)行版(比如我的Fedora 17)是一個(gè)已知的錯(cuò)誤, 可以忽略屋匕。
然后會(huì)看到打印出公鑰的指紋葛碧,請(qǐng)確認(rèn)此指紋和你公鑰的一致,然后輸入"yes"確認(rèn)过吻。
" Hi your_name! You've successfully authenticated, but GitHub does not provide shell access."
如果your_name正確顯示你的ID进泼,則說明成功設(shè)置了SSH公鑰.
一臺(tái)機(jī)器上管理多個(gè)Github帳號(hào)的SSH Key
如果你在一臺(tái)機(jī)器使用兩個(gè)github賬號(hào)(比如私人賬號(hào)abc和工作賬號(hào)xyz),兩個(gè)帳號(hào)用不同的SSH KEY,還需要編輯一下配置文件~/.ssh/config:
Host personal.github.com
HostName github.com
User git
IdentityFile ~/.ssh/personal_rsa
Host work.github.com
HostName github.com
User git
IdentityFile ~/.ssh/work_rsa
解釋此配置文件:
- Host: "personal.github.com"是一個(gè)"別名"乳绕,可以隨意命名, 像
github-PERSONAL
這樣的命名也可以绞惦; - HostName:比如我工作的git倉儲(chǔ)地址是
git@code.sohuno.com:username/repo_name.git
, 那么我的HostName就要填"sohuno.com"; - IdentityFile: 所使用的公鑰文件;
配置完畢洋措,用下面的命令測試一下:
ssh -T git@personal.github.com
ssh -T git@work.github.com
# 注: @符號(hào)后面的"personal.github.com"就是在~/.ssh/config文件中指定的"Host"項(xiàng)
(1)為已經(jīng)檢出的repos指定github賬號(hào):
在已經(jīng)檢出的repos目錄下執(zhí)行:
git config user.name "your-id"
git config user.email "your-id@gmail.com"
修改.git/config并找到[remote "origin"]
,修改url
的值為:
[remote "origin"]
url = git@personal.github.com:user_name/repos_name.git
其中, personal.github.com
就是在配置文件~/.ssh/config中的Host
項(xiàng), 設(shè)置完成后, 在這個(gè)工程目錄git push
會(huì)自動(dòng)以此git帳號(hào)提交代碼翩隧。
(2)使用指定賬號(hào)clone已存在的repos:
- 使用指定賬號(hào)clone一個(gè)已經(jīng)存在的repos:
git clone git@personal.github.com:user_name/repos_name.git
, 上面命令中的"personal.github.com"就是在~/.ssh/config文件中指定的"Host"項(xiàng), "user_name"是指定提交代碼的賬戶名, 例如:
git clone git@personal.github.com:whatsdjgpp/Vimrc.git
Cloning into 'Vimrc'...
- 然后還需要config一下user.name和user.email, 進(jìn)入repos目錄執(zhí)行:
git config user.name your_name
git config user.email your_email
以后在此repos下git push origin master
就是使用指定的用戶push.
(3)使用指定賬號(hào)init新的repos:
如果是新建一個(gè)倉儲(chǔ):在github.com創(chuàng)建一個(gè)新repos,
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin git@personal.github.com:user_name/testing.git
$ git push -u origin master
上面命令第4行: "personal.github.com"就是在~/.ssh/config文件中指定的"Host"項(xiàng), "user_name"是指定提交代碼的賬戶名.
參考:
《Quick Tip: How to Work with GitHub and Multiple Accounts》
《Multiple SSH Keys settings for different github account》
《多個(gè)github帳號(hào)的SSH key切換》
《GitHub: Generating SSH Keys》