SSH 配置使用了错误的密钥?

问题描述 投票:0回答:1

我今天开始了一份新工作,他们使用 bitbucket,他们使用我的新工作电子邮件地址为我创建了一个帐户。

但是,当我粘贴 SSH 密钥时,Bitbucket 抱怨该密钥已在使用中(我的个人帐户),因此我必须设置另一个密钥。

我的 SSH 配置看起来像这样,但它不起作用,并且似乎选择了错误的密钥:

Host work
  HostName bitbucket.org
  User git
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_work
  IdentitiesOnly yes

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

然后我尝试了

git clone work:path/to/some.git
,但得到“无法从存储库读取。”

我必须编辑掉我的正常

id_rsa
才能工作,所以现在看起来像这样:

Host *
  HostName bitbucket.org
  User git
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_work
  IdentitiesOnly yes

我做错了什么?

git ssh
1个回答
4
投票

使用您的初始配置文件(带有

Host work
Host *
的配置文件),您可以执行以下操作:

ssh -Tv work
您将看到实际使用的密钥。如果是

id_rsa

,则表示
Host *
中指定的内容优先于
Host work

如果您想

使用您的个人密钥进行所有事情工作,您需要使用模式

Host * !work AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_rsa


我假设通配符主机是优先级最低的“后备”选项。我想这不是真的吗?

在 SSH 配置文件 (

~/.ssh/config

) 中,选项的应用基于它们在文件中出现的顺序,而不仅仅是基于 
Host
 模式的特殊性:

    SSH 从上到下读取配置文件。
  • 对于每个
  • Host
     块,SSH 检查目标主机是否与指定的模式匹配。多个
    Host
    块可以匹配同一个目标主机。
  • 如果
  • Host
     块匹配,SSH 将应用该块内的选项。选项是
    累积的,这意味着它们可以相加,并且后面的选项可以覆盖之前的选项(如果它们用于相同的参数)。
由于 SSH 按照配置出现的顺序应用配置,因此出现在特定

Host *

 块之后
的通用 Host work 块可以
覆盖之前为 
work 指定的设置。给定参数的最后一个匹配选项生效。
这就是为什么我从 
work

模式中排除

Host *

 (
Host * !work
)
或者,您可以将 
Host *

块放在

Host work

 块之前,但对于 
IdentityFile 来说并不可靠:除非您使用 IdentitiesOnly yes
,否则 SSH 仍然可以从匹配块中累积多个身份文件。
有关更多信息,请参阅 
Chris Siebenmann
 的“
将向远程服务器提供哪些 SSH 身份以及何时

”。

© www.soinside.com 2019 - 2024. All rights reserved.