mac下配置兩個ssh提交到兩個github賬戶障般,包含不生效分析

1. 預(yù)置條件和期望:

mac環(huán)境调鲸,公司電腦上配置了公司賬戶需要的ssh,這個時候如果有自己的一些總結(jié)想push到自己的github賬戶上挽荡,因為現(xiàn)在github已經(jīng)停止https方式push代碼藐石,這個時候就需要配置兩個ssh來分別到兩個github賬戶上。

準(zhǔn)備工作:

  1. 兩個ssh key
  2. 兩個github賬戶

cd到~/.ssh目錄下使用以下命令生成兩個key定拟,自行調(diào)整參數(shù)和名字于微。

# 這里默認rsa生成最基本的秘鑰,需要其他加密類型的自行調(diào)整
ssh-keygen -t rsa -C "abc@163.com" -f ~/.ssh/id_rsa_a
ssh-keygen -t rsa -C "xyz@163.com" -f ~/.ssh/id_rsa_b

2. 具體配置:

好青自,那我們現(xiàn)在在~/.ssh目錄下有了兩個ssh key株依,四個文件

id_rsa_a
id_rsa_a.pub
id_rsa_b
id_rsa_b.pub
2.1 config文件

SSH config是Linux系統(tǒng)下針對SSH客戶端的一個參數(shù)配置方案,可以將一些關(guān)于SSH命令的參數(shù)放到配置文件中去延窜,執(zhí)行ssh命令的時候從文件中讀取恋腕,簡化命令行的操作。

ssh的config配置也有一定的優(yōu)先級逆瑞,由高到低按照以下的順序獲取(這里有個坑荠藤,后面會說到):

例子
命令行選項 -p 10086-i /path/to/identity_file 等選項來設(shè)置SSH的端口號或認證證書位置
用戶配置文件 ~/.ssh/config获高,默認不存在哈肖,需要手動創(chuàng)建
系統(tǒng)級配置文件 /etc/ssh/ssh_config,針對所有user的配置文件念秧,一般用不到

按照我們的期望淤井,config配置如下:

#~/.ssh/config
Host github_a
       HostName github.com
       User git
       IdentityFile ~/.ssh/id_rsa_a

Host github_b
       HostName github.com
       User git
       IdentityFile ~/.ssh/id_rsa_b

我們先貼一條clone命令:git clone git@github.com:yocn/resp.git
我們來拆解一下這個命令
用戶名@主機地址:id/倉庫名

  • Host
    也可稱為Alies,一個別名摊趾,通過它可以找到以下的配置
  • HostName
    需要ssh連接過去的主機地址币狠,在我們現(xiàn)在的需求里面就是github.com,也可以是IP地址砾层,在ssh連接linux server的時候一般是ip地址
  • User
    登錄主機的用戶名总寻,在我們現(xiàn)在的需求里面是git,如果是ssh連接server的時候就是你需要ssh登錄的用戶名
  • IdentityFile
    秘鑰的位置

所以配置完之后梢为,我們就可以把之前的clone命令用下面的代替:
git clone git@github.com:yocn/resp.git

git clone github_a:yocn/resp.git

2.2 添加到ssh-agent

ssh agent渐行,意為 ssh 代理,是一個密鑰管理器铸董,用來管理一個多個密鑰祟印,并為其他需要使用 ssh key 的程序提供代理。
當(dāng)其他程序需要身份驗證的時候 可以將驗證申請交給 ssh-agent 來完成整個認證過程 粟害。使用不同的密鑰連接到不同的主機時蕴忆,需要要手動指定對應(yīng)的密鑰,而 ssh 代理可以 自動幫助我們選擇對應(yīng)的密鑰進行認證悲幅。
需要把上面的兩個key添加到ssh-agent套鹅,可以用下面的命令站蝠,添加到環(huán)境變量配置文件里,每次運行自動添加卓鹿,就不用手動添加了菱魔。

# .bash_profile
nohup ssh-add ~/.ssh/id_rsa_a >/dev/null 2>&1
nohup ssh-add ~/.ssh/id_rsa_b >/dev/null 2>&1

還有一種方式可以自動添加到ssh-agent中,ssh-agent啟動的時候就自動加載進去了

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa_a

但是這種方法我沒法加載多個key吟孙,只能配置一個IdentityFile澜倦,每次可以使用ssh-add -l查詢已經(jīng)添加到ssh-agent中的key,可以看到上面兩個key都添加進去了杰妓。

abc@abc ~ % ssh-add -l
3072 SHA256:LAgtT7X/bFLtc8fyxxxxxxxxWkSKP+UqVi/5YUpExBs abc@163.com (RSA)
4056 SHA256:4vZ5H41eFKXn/KLxxxxxxxx+3zR7MD3e46ytVobsXsM4 xyz@163.com (RSA)

這個時候我們已經(jīng)可以測試我們的連通性了:

abc@abc resp % ssh -T github_a                           
Hi yocn! You've successfully authenticated, but GitHub does not provide shell access.

不出意外的話是這樣的打印結(jié)果藻治,如果有問題請移步5. 不生效的異常檢查:查看并一步步排除。

3. 拉取巷挥,提交代碼

我們遇到的一般情況是公司的環(huán)境已經(jīng)配好了桩卵,我們要做的就是使自己的環(huán)境work但不影響公司環(huán)境的運行。

這個時候我個人的github倉庫為
git clone git@github.com:yocn/resp.git
我們需要用我們替換過的倉庫地址來拉取倉庫:
git clone github_a:yocn/resp.git

拉取下來之后我們可以使用git remote -v命令查看倉庫的遠端地址倍宾。

abc@abc resp % git remote -v
origin  git@github_a:yocn/resp.git (fetch)
origin  git@github_a:yocn/resp.git (push)

這個時候嘗試用git push測試吸占,一般沒問題了。

4. one more thing

我這個搞了半天沒有成功是因為之前的時候在ssh的global配置中配了core.sshCommand='ssh -i ~/.ssh/id_rsa'凿宾,當(dāng)時用這個命令配置了一個秘鑰進去矾屯,后來忘記了。

如果設(shè)置了core.sshCommand初厚,git fetchgit push在需要連接到遠程系統(tǒng)時將使用指定的命令而不是 ssh件蚕。該命令與GIT_SSH_COMMAND環(huán)境變量的形式相同,并在設(shè)置環(huán)境變量時被覆蓋产禾。
也就是每次執(zhí)行ssh的時候會執(zhí)行ssh -i ~/.ssh/id_rsa排作,所以導(dǎo)致失敗。

5. 不生效的異常檢查:

  1. 檢查git工程的config(工程目錄下使用git config --list)或者git remote -v查看工程的push和origin地址是否是我們配置的地址
  2. ssh-add -l查看我們期望的ssh 私鑰是否添加到ssh-agent
  3. 查看期望的公鑰是否在github中配置亚情,比對第2步中的私鑰列表妄痪,是否添加到ssh-agent
  4. 檢查自己的git全局配置(git config --global --list),在git config core.sshcommand中是否有什么額外配置導(dǎo)致異常

總結(jié):

需要配置兩個ssh key在兩個github賬戶登錄的時候楞件,需要以下幾步:

  1. ~/.ssh/config中配置不同的私鑰
  2. 兩個私鑰都需要用ssh-add命令添加到ssh-agent
  3. clone倉庫的時候需要用config中配置的Host名字替換
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衫生,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子土浸,更是在濱河造成了極大的恐慌罪针,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黄伊,死亡現(xiàn)場離奇詭異泪酱,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門墓阀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毡惜,“玉大人,你說我怎么就攤上這事斯撮【铮” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵吮成,是天一觀的道長橱乱。 經(jīng)常有香客問我辜梳,道長粱甫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任作瞄,我火速辦了婚禮茶宵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宗挥。我一直安慰自己乌庶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布契耿。 她就那樣靜靜地躺著瞒大,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搪桂。 梳的紋絲不亂的頭發(fā)上透敌,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音踢械,去河邊找鬼酗电。 笑死,一個胖子當(dāng)著我的面吹牛内列,可吹牛的內(nèi)容都是我干的撵术。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼话瞧,長吁一口氣:“原來是場噩夢啊……” “哼嫩与!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起交排,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蕴纳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后个粱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體古毛,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稻薇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫂冻。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖塞椎,靈堂內(nèi)的尸體忽然破棺而出桨仿,到底是詐尸還是另有隱情,我是刑警寧澤案狠,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布服傍,位于F島的核電站,受9級特大地震影響骂铁,放射性物質(zhì)發(fā)生泄漏吹零。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一拉庵、第九天 我趴在偏房一處隱蔽的房頂上張望灿椅。 院中可真熱鬧,春花似錦钞支、人聲如沸茫蛹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婴洼。三九已至,卻和暖如春撼嗓,著一層夾襖步出監(jiān)牢的瞬間柬采,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工静稻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留警没,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓振湾,卻偏偏與公主長得像杀迹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子押搪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容