Mac上配置SSH - 多個(gè)SSH

Mac上配置SSH - 多個(gè)SSH

前言

首先做個(gè)說(shuō)明

  1. 生成一對(duì)默認(rèn)的私鑰公鑰,私鑰自己客戶端留著用,公鑰可以給多個(gè)平臺(tái)用。
  2. 多對(duì)私鑰公鑰,主要是應(yīng)對(duì)一個(gè)平臺(tái)多個(gè)賬號(hào)的情況。當(dāng)然你想每個(gè)平臺(tái)使用不同的私鑰公鑰也是可以的。
  3. 多次生成私鑰公鑰需要自己重新命名,否則會(huì)覆蓋之前的。

一、查看是否已經(jīng)生成過(guò)/是否應(yīng)存在了私鑰公鑰

進(jìn)入 用戶/.ssh 目錄

$ cd ~/.ssh

如果找不到目錄或者目錄中沒(méi)有東西,證明以前沒(méi)有生成過(guò)。

或者直接使用命令來(lái)查看

$ ls -al ~/.ssh
# Lists the files in your .ssh directory, if they exist

檢查目錄列表,看看您是否已經(jīng)擁有公共SSH密鑰。默認(rèn)情況下,GitHub受支持的公鑰的文件名如下之一。

id_rsa.pub
id_ecdsa.pub
id_ed25519.pub

提示:如果您收到~/.ssh不存在的錯(cuò)誤,則在默認(rèn)位置沒(méi)有現(xiàn)有的SSH密鑰對(duì)。您可以在下一步創(chuàng)建新的SSH密鑰對(duì)。

二、生成密鑰對(duì)(私鑰公鑰)

兩種方式,一種是生成的時(shí)候直接添加好路徑;另一種是不帶路徑,需要第二步添加路徑或使用默認(rèn)路徑。

ssh key命名的第一種方式:

$ ssh-keygen -t rsa -C "youremail@yourcompany.com" -f ~/.ssh/id_rsa_github

代碼參數(shù)含義:
-t 指定密鑰類型,默認(rèn)是 rsa ,可以省略。
-C 設(shè)置注釋文字,比如郵箱。
-f 指定密鑰文件存儲(chǔ)文件名。

ssh key命名的第二種方式:

$ ssh-keygen -t rsa -C "youremail@xxx.com"

以上代碼省略了 -f 參數(shù),因此,運(yùn)行上面那條命令后會(huì)讓你輸入一個(gè)文件名,用于保存剛才生成的 SSH key 代碼。

按回車后:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxx/.ssh/id_rsa): id_rsa_github(取個(gè)名字)
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in 
id_rsa_github.
Your public key has been saved in 
id_rsa_github.pub.

最好每次生成時(shí)都給SSH Key取個(gè)名字,這樣后面在管理時(shí)自己也一目了然。我這里的格式是id_rsa_項(xiàng)目名_git提供方,我生成的所有key都遵循這個(gè)規(guī)則命名。建議你也有你自己的一種命名方式,并且保持統(tǒng)一。如果不取名字,默認(rèn)的是id_rsa,如果后面生成時(shí)不命名,會(huì)把這個(gè)覆蓋掉。密碼可以不設(shè)置,免得每次提交時(shí)還要輸入一次,安全性自己衡量吧。第一次生成key時(shí),會(huì)在~目錄下創(chuàng)建一個(gè).ssh目錄。

附:
鍵入ssh-keygen -t,然后是鍵類型和可選注釋。此注釋包含在創(chuàng)建的.pub文件中。您可能想使用電子郵件地址進(jìn)行注釋區(qū)分。

例如,對(duì)于ED25519:

ssh-keygen -t ed25519 -C "<comment>"

對(duì)于2048位RSA:

ssh-keygen -t rsa -b 2048 -C "<comment>"

https://docs.gitlab.com/ee/ssh/#add-an-ssh-key-to-your-gitlab-account

三、將SSH密鑰添加到ssh代理中

ssh服務(wù)器默認(rèn)是去找id_rsa,現(xiàn)在需要把這個(gè)key添加到ssh-agent中,這樣ssh服務(wù)器才能認(rèn)識(shí)id_rsa_TestSSH_github。

  • 在后臺(tái)啟動(dòng)ssh-agent。
$ eval $(ssh-agent -s)
> Agent pid 59566

根據(jù)您的環(huán)境,您可能需要使用其他命令。例如,在啟動(dòng)ssh-agent之前,您可能需要通過(guò)運(yùn)行sudo -s -H來(lái)使用root訪問(wèn),或者您可能需要使用exec ssh-agent bashexec ssh-agent zsh來(lái)運(yùn)行ssh-agent。

  • 如果您使用的是macOS Sierra 10.12.2或更高版本,則需要修改~/.ssh/config文件,以自動(dòng)將密鑰加載到ssh代理中,并將密碼存儲(chǔ)在鑰匙串中。
  1. 首先,檢查您的~/.ssh/config文件是否存在于默認(rèn)位置。
$ open ~/.ssh/config
> The file /Users/you/.ssh/config does not exist.
  1. 如果文件不存在,請(qǐng)創(chuàng)建文件。
$ touch ~/.ssh/config

打開(kāi)您的~/.ssh/config文件,然后修改文件以包含以下行。如果您的SSH密鑰文件的名稱或路徑與示例代碼不同,請(qǐng)修改文件名或路徑以匹配當(dāng)前設(shè)置。

Host github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa_github

注意:如果您選擇不向密鑰添加密碼,則應(yīng)省略UseKeychain行。

注意:如果您看到這樣的錯(cuò)誤
/Users/USER/.ssh/config: line 16: Bad configuration option: usekeychain
Host *部分添加額外的配置行:
Host *
IgnoreUnknown UseKeychain

注意:關(guān)于config文件,同時(shí)參考下列文件

將不同賬號(hào)的工程圖服務(wù)器與ssh-key關(guān)聯(lián)

# 添加config配置文件
# 配置文件參數(shù)
# Host : Host可以看作是一個(gè)你要識(shí)別的模式,對(duì)識(shí)別的模式,進(jìn)行配置對(duì)應(yīng)的的主機(jī)名和ssh文件
# HostName : 要登錄主機(jī)的主機(jī)名
# User : 登錄名
# IdentityFile : 指明上面User對(duì)應(yīng)的identityFile路徑

#thub user(first@email.com)
Host github1
 HostName git.some.com/
 User git
 IdentityFile /Users/xxx/.ssh/id_rsa

# second user(second@email.com)
 # 建一個(gè)github別名,新建的帳號(hào)使用這個(gè)別名做克隆和更新
Host github2
 HostName github.com
 User git
 IdentityFile /Users/xxx/.ssh/id_ras_bill_github

另一個(gè)例子

#
# Main gitlab.com server
#
Host gitlab.com
RSAAuthentication yes
IdentityFile ~/my-ssh-key-directory/my-gitlab-private-key-filename
User mygitlabusername

另一個(gè)例子

#
# Our company's internal GitLab server
#
Host my-gitlab.company.com
RSAAuthentication yes
IdentityFile ~/my-ssh-key-directory/company-com-private-key-filename

另一個(gè)例子

# GitLab.com
Host gitlab.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/gitlab_com_rsa

# Private GitLab instance
Host gitlab.company.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/example_com_rsa

另一個(gè)例子

# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa

首先,檢查您的~/.ssh/config文件是否存在于默認(rèn)位置。

$ open ~/.ssh/config
> The file /Users/you/.ssh/config does not exist.
  • 將您的SSH私鑰添加到ssh代理中,并將密碼存儲(chǔ)在鑰匙串中。如果您使用其他名稱創(chuàng)建了密鑰,或者如果您正在添加具有不同名稱的現(xiàn)有密鑰,請(qǐng)將命令中的id_rsa_github替換為私鑰文件的名稱。
$ ssh-add ~/.ssh/id_rsa_github

ssh-add <directory to private SSH key>
如果執(zhí)行ssh-add時(shí)提示"Could not open a connection to your authentication agent",可以現(xiàn)執(zhí)行命令:

$ ssh-agent bash

然后再運(yùn)行ssh-add命令。

  • 查看添加結(jié)果
ssh-add -l

補(bǔ)充:

# 可以通過(guò) ssh-add -l 來(lái)確私鑰列表
$ ssh-add -l
# 可以通過(guò) ssh-add -D 來(lái)清空私鑰列表
$ ssh-add -D

四、將公鑰粘貼到git服務(wù)器平臺(tái)上,如GitHub

當(dāng)然可以直接打開(kāi)剛生成的公鑰文件id_rsa_github.pub文件,復(fù)制全部?jī)?nèi)容去平臺(tái)Add SSH Key;也可以使用命令復(fù)制公鑰文件內(nèi)容貼到平臺(tái) Add SSH Key。

  • 附:使用命令復(fù)制
    將SSH公鑰復(fù)制到剪貼板上
$ pbcopy < ~/.ssh/id_rsa_github.pub
# Copies the contents of the id_rsa_github.pub file to your clipboard

提示:如果pbcopy不起作用,您可以找到隱藏的.ssh文件夾,在您最喜歡的文本編輯器中打開(kāi)文件,并將其復(fù)制到剪貼板。

其規(guī)則就是:從上至下讀取config的內(nèi)容,在每個(gè)Host下尋找對(duì)應(yīng)的私鑰。
這里將GitHub SSH倉(cāng)庫(kù)地址中的git@github.com替換成新建的Host別名如github2,那么原地址是:git@github.com:username/Mywork.git,替換后應(yīng)該是:github2:username/Mywork.git

五、測(cè)試連接

測(cè)試一下

$ ssh -T github2
Hi 0xJoker! You've successfully authenticated, but GitHub does not provide shell
  • 輸入以下命令測(cè)試
$ ssh -T git@github.com
# Attempts to ssh to GitHub

您可能會(huì)看到這樣的警告:

> The authenticity of host 'github.com (IP ADDRESS)' can't be established.
> RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
> Are you sure you want to continue connecting (yes/no)?
> Hi username! You've successfully authenticated, but GitHub does not
> provide shell access.

您可能會(huì)看到以下錯(cuò)誤信息:

...
Agent admitted failure to sign using the key.
debug1: No more authentication methods to try.
Permission denied (publickey).

這是某些Linux發(fā)行版的已知問(wèn)題。有關(guān)更多信息,請(qǐng)參閱“錯(cuò)誤:代理承認(rèn)未能簽名”。

六、常見(jiàn)問(wèn)題處理

經(jīng)常與會(huì)遇到下面這種情況,我也很納悶,每次都解析到不到域名和地址

ssh: Could not resolve hostname git.oschina.net: 
nodename nor servname provided, or not known

查資料之后的解決辦法是:
step1.
ping address
獲取到對(duì)于地址的ip
step2. 在/etc/hosts中添加一行如下:
ip address
xxxxxxxxxx
這樣就可以玩起來(lái)了。


參考:Git配置多個(gè)SSH-Key https://gitee.com/help/articles/4229#article-header0

收集的錯(cuò)誤解決方案,希望能幫到你:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 176,463評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 63,009評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 55,218評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,436評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 34,659評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 35,917評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,687評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評(píng)論 2 374