【问题标题】:git ssh authorisation error when accessing bitbucket repo multiple keys访问bitbucket repo多个密钥时出现git ssh授权错误
【发布时间】:2018-05-25 14:47:35
【问题描述】:

我有多个 ssh 密钥,一个项目使用一个密钥。我已成功将公共 ssh 密钥分配给我的 bitbucket 帐户中的相关存储库。

它们存储在以下位置:

~/.ssh/rsa_generic_repos
~/.ssh/rsa_generic_repos.pub
~/.ssh/rsa_project1
~/.ssh/rsa_project1.pub

然后我在尝试任何 git 访问之前将这些密钥添加到我的 ssh-agent:

ssh-add ~/.ssh/rsa_generic_repos
ssh-add ~/.ssh/rsa_project1

ssh-add -l - 显示:

4096 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXX Generic Repo Key (RSA)
4096 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXX Project 1 Key (RSA)

我的问题:

这可以正常工作(克隆 repo):

git clone git@bitbucket.org:Myusername/generic-repo.com.git

这不起作用:

git clone git@bitbucket.org:Myusername/project1.com.git

错误:

Cloning into 'project1'...
repository access denied. deployment key is not associated with the requested repository.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.

如果我跑:

ssh-add -D
ssh-add ~/.ssh/rsa_project1
git clone git@bitbucket.org:Myusername/project1.com.git

它成功地克隆了以前不会克隆的 repo。这首先表明在 bitbucket 上正确设置了公钥,并且 ssh 守护进程没有尝试使用除第一个条目之外的任何 ssh 密钥,因此导致上述错误。

如果有人可以帮助我让 ssh 通过存储在 ssh-agent 会话中的所有密钥,我将不胜感激。

感谢您的帮助和时间。

【问题讨论】:

  • 虽然 SSH 协议支持多个密钥,但它也可以在服务器端配置为只允许有限次数的登录尝试。如果位桶是这样配置的,它应该被改变。也许是支持票?
  • 好主意,我已经使用 Bitbucket 创建了支持票证。我会在这里发回他们要说的话。
  • 这就是你需要的gist.github.com/jexchan/2351996。阅读第一条评论。
  • 为什么将这些密钥添加到特定的存储库而不是您的帐户?
  • @GustavMahler,如果你还是要把所有的钥匙放在同一个地方,你不妨在三个仓库中添加一个钥匙。使用 git,我以最少的原则创建服务帐户,因为每个部署密钥都是全局唯一的(我还没有开始理解这个选择) - 但如果可能的话,我会结合具有等效访问权限的实体。您的自动化总是可以创建一个专用代理并为每个项目设置 ssh 密钥。

标签: git ssh bitbucket


【解决方案1】:

使用多个 ssh 密钥的正确方法是 ~/.ssh/config 文件,如 I describe here

Host bbgeneric
    Hostname bitbucket.org
    IdentityFile ~/.ssh/rsa_generic_repos
    User git

Host bbproject1
    Hostname bitbucket.org
    IdentityFile ~/.ssh/rsa_project1
    User git

你会像使用 ssh url 一样

bbgeneric:Myusername/generic-repo.com.git
bbproject1:Myusername/project1.com.git

使用一个部署密钥确实更容易,但我想说明配置 ssh 功能,它允许您使用任意数量的密钥。

【讨论】:

【解决方案2】:

感谢 VonC 的回答。
这是我可以使用的可行解决方案:

~/.ssh/config

Host bitbucket-generic-repos
    HostName bitbucket.org
    IdentityFile ~/.ssh/rsa_generic_repos

Host bitbucket-project1
    HostName bitbucket.org
    IdentityFile ~/.ssh/rsa_project1

以下命令给了我一个错误:

git clone git@bitbucket.org:<MyUsername>/project1.com.git

在 git 命令中将 bitbucket.org 替换为在 ~/.ssh/config 中定义的 ssh 别名会导致所需的行为没有错误:

git clone git@bitbucket-project1:<MyUsername>/project1.com.git (works!)
git clone git@bitbucket-generic-repos:<MyUsername>/project1.com.git (also works!)

【讨论】:

  • 干得好。 +1。请注意,通过在 ~/.ssh/config 文件中添加 User git,您可以删除 URL 中的 git@ 部分。
猜你喜欢
  • 2018-11-18
  • 2013-05-17
  • 1970-01-01
  • 2020-10-06
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
相关资源
最近更新 更多