如何在同一个系统中维护具有多个 ssh 键的多个 bitbucket 帐户

我有多个 Git 帐户,一个是我的个人用途,一个是公司用途。两个账户都需要从我的笔记本上激活。 这里我生成了 两个 ssh 键,如 id _ rsa. pub,id _ benwork _ rsa. pub 我将 git 的 配置配置为

Host sfsworkdid
HostName bitbucket.org
IdentityFile ~/.ssh/id_rsa
Host workdid
HostName bitbucket.org
IdentityFile ~/.ssh/id_benwork_rsa

这就是我的问题所在: 同时向任何回购 git 推送第一个 ssh _ key 密码短语。 每次我都将 git 配置中的 user.name 更改为 Git config user.name“ mybitbucket etusername”。 因此,请告诉我如何在同一个系统中使用多个 ssh 键维护多个 git 帐户

我尝试了 如何使用多个 ssh 键,多个 bitbucket 帐户 但没用

到目前为止,在 github/bitbucket 上使用多帐户/多身份进行推送有些帮助

30842 次浏览

为 Mac OSX、 GitBash 和 Linux 创建多个标识

此时您应该已经创建了至少一个默认标识。若要查看是否已有默认标识,请列出。Ssh 目录。默认的标识文件显示为 id _ crypt 和 id _ crypt。酒吧搭档。加密值是 rsa 或 dsa。使用 ssh-keygen 命令创建新标识。在下面的示例中,标识被命名为 Personalid。

$ ssh-keygen -f ~/.ssh/personalid -C "personalid"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/manthony/.ssh/personalid.
Your public key has been saved in /Users/manthony/.ssh/personalid.pub.
The key fingerprint is:
7a:9c:b2:9c:8e:4e:f4:af:de:70:77:b9:52:fd:44:97 personalid
The key's randomart image is:
+--[ RSA 2048]----+
|         |
|         |
|        .|
|        Eo|
|  .  S  . ..|
|  . . o . ... .|
|  . = = ..o o |
|  . o X ... . .|
|  .ooB.o ..  |
+-----------------+

如果您有多个 Bitbucket 帐户,则需要为每个帐户生成一个新的公钥/私钥对。

创建一个 SSH 配置文件

当您有多个标识文件时,创建一个 SSH 配置文件机制来为您的各种标识创建别名。您可以使用许多参数和不同的方法构造一个 SSH 配置文件。此示例中使用的别名条目的格式如下:

Host alias
HostName bitbucket.org
IdentityFile ~/.ssh/identity

要为两个标识(workid 和 Personalid)创建一个配置文件,需要执行以下操作:

  1. 打开终端窗口。

  2. 编辑 ~/. ssh/config 文件 有一个配置文件,创建一个。

  3. 为每个身份添加别名 例如:

    Host workid
    HostName bitbucket.org
    IdentityFile ~/.ssh/workid
    Host personalid
    HostName bitbucket.org
    IdentityFile ~/.ssh/personalid
    
  4. 关闭并保存文件。

现在,您可以将存储库 URL 地址的一部分替换为别名,如下所示: git@bitbucket.org:accountname/reponame.git -> git@alias:accountname/reponame.git

将每个密钥加载到适当的 Bitbucket 帐户中

enter image description here

确保 ssh-agent 正在运行并用您的密钥加载

enter image description here

使用 SSH 和别名配置克隆存储库

要克隆具有您配置的多个 SSH 标识之一的存储库,您需要克隆回购并在 SSH URL 中使用您的别名。要亲自尝试,请登录 Bitbucket 并执行以下操作:

  1. 导航到存储库概述。
  2. 显示 SSH URL。
    例如,ssh URL 作为:
    Git@bitbucket. org: Accountname/reponame.git
    然后使用以下方法克隆存储库:
    Git 克隆 git@私人的: account tname/reponame.git

这是指正式的解决方案 为 GitBash、 Mac OSX 和 Linux 配置多个 SSH 标识,它的工作原理为我好!

如果收到“ ssh: 未能解析 hostname: Name 或 service not known”错误,以下内容可能会有所帮助。

正如 Shannon Zhou 的回答所指出的,您希望创建 SSH 化名。GitHub,BitBucket 等都有这方面的说明,但我在 Windows10上遇到了一个问题,可能会对其他人有所帮助。SSH 有两个不同的配置文件: 一个系统范围的配置文件和一个用户特定的配置文件。我读到的指令,包括 Shannon Chow 的,都说要将别名添加到位于 ~/的 特定用户配置文件中。嘘/。配置

在我的例子中,我需要将别名添加到 全系统配置文件中,在 Windows 10上使用 Git 时,该文件通常位于这里: C: Program Files Git etc ssh ssh _ config,在 Git 的目录中。

您可以通过运行这个命令来确定 SSH 正在使用哪个配置文件,“ myalias”可以是任何字符串,我们感兴趣的是它将输出的配置文件路径:

ssh -vv myalias


OpenSSH_7.1p2, OpenSSL 1.0.2d 9 Jul 2015
debug1: Reading configuration data /etc/ssh/ssh_config

在输出中注意文件路径“/etc/ssh/ssh _ config”。这告诉我们 SSH 在那里查找别名,而不是在 ~/中。嘘/。配置文件。

上面的 ~/.ssh/config方法的一个替代方法是在克隆命令本身中指定配置变量 core.sshCommand。比如说,

git clone --config core.sshCommand='ssh -i/home/username/.ssh/id_ed25519' git@bitbucket.org:the_best/awesome_repo.git

这将设置本地存储库配置值,并使后续的 push/pull 命令“正常工作”。

$ git config --local --get core.sshCommand
ssh -i/home/username/.ssh/id_ed25519

这在 git 2.10及更高版本中得到了支持。

前端编辑: 看起来 Bitbucket 现在已经停止支持下面描述的机制。到今天为止,我使用的是上面@shannon-chou 的解决方案,它工作得很好。其余的职位留在这里作为历史参考。—— JBC,2019-06-23

在2016年,BitBucket 似乎增加了对一个稍微简单的解决方案的支持,这个解决方案不需要在。Ssh 配置文件。具体来说,现在可以使用 ssh 用户名来指示您正在访问的帐户。例如,不使用 giturl

Git@bitbucket. org: efhutton/squanzle.git

你可以使用 git url

Efhutton@bitbucket. org: efhutton/squanze.git

(或者 ssh://efhutton@ bitbucket.org/efhutton/squanze.git ,看起来是等价的)

基本问题是 ssh 客户机将以固定的顺序显示 ssh-key 标识。假设您的工作帐户名为 bobobogo,您的私有帐户名为 efhutton,并且您的 ssh 客户机配置为首先提供用 bobobogo 注册的密钥。如果您试图获取与 efhutton 相关的帐户,那么您的 ssh 客户端提供 bobobogo 密钥,bitbucket 接受它,然后发现 bobogo 帐户不能访问 efhutton/squanze 回购,并阻止您。使用这个新的机制,你可以告诉 bitbucket 你想要使用一个为 efhutton 帐户授权的密钥,所以当你的 ssh 客户端显示为 bobobogo 注册的密钥时,bitbucket 会将其关闭,然后你的 ssh 客户端就可以显示下一个键,这个键是 在 efhutton 帐户中注册的。

详情请看这篇博文

Https://bitbucket.org/blog/better-support-multiple-ssh-keys

编辑: 你看到上面的信息了,对吗?

如果其他注释不起作用,这里是我为我的 bitbucket 帐户所做的。

    Host *
StrictHostKeyChecking=no
UserKnownHostsFile=/dev/null


Host nameOfSSH-Bitbucket bitbucket.org
HostName bitbucket.org
User myBITBUCKETUserName
IdentityFile /Users/luisconstante/.ssh/nameOfSSH-Bitbucket


Host nameOf2ndSSH-Bitbucket bitbucket.org
HostName bitbucket.org
User myBITBUCKET2ndUserName
IdentityFile /Users/luisconstante/.ssh/nameOf2ndSSH-Bitbucket


git remote add origin myBITBUCKETUserName@bitbucket.org:mybitbucketteam/my-cool-app.git
git remote add origin myBITBUCKETUserName2@bitbucket.org:mybitbucketteam/my-cool-app2.git

如果您不想每次都输入您的密码短语(这可能是不安全的) ,您可以通过保持密码提示为空来创建一个新的 ssh 密钥。

我试过 UseKeychain yes,但失败了。这是什么为我工作。

如果我遗漏了什么,请告诉我,这是对其他评论的补充。

二零一九年

按以下方式编辑您的 ~/. ssh/config 文件!

Host bitbucket.org-yourusername
HostName bitbucket.org
User yourusername
IdentityFile ~/.ssh/yoursshkey
IdentitiesOnly yes

改变你的远程 git 地址,让你的用户名在“@bitbucket. org”之前

git remote add origin yourusername@bitbucket.org:company/app.git

或者

git remote set-url origin yourusername@bitbucket.org:company/app.git

如果您还没有克隆存储库:

git clone yourusername@bitbucket.org:company/app.git

在网上搜索了很多内容后,在社区的帮助下,我弄明白了如何在我的 Mac-MacOS 蒙特雷上配置2个不同的 bitbucket 帐户。

假设您有2个 bitbucket 帐户,其用户名是 username1和 username12。

  1. 打开终端并为两个用户名创建2个 ssh file2:

ssh-keygen -f ~/.ssh/username1-Bitbucket

ssh-keygen -f ~/.ssh/username2-Bitbucket

  1. 启动 ssh-agent:

eval $(ssh-agent)

  1. 创建或编辑 ~/. ssh/config 文件:

创造:

touch ~/.ssh/config

open ~/.ssh/config

编辑:

open ~/.ssh/config

The ~/.ssh/config file should look like this:

Host username1-Bitbucket
HostName bitbucket.org
User username1
IdentityFile ~/.ssh/username1-Bitbucket


Host username2-Bitbucket
HostName bitbucket.org
User username2
IdentityFile ~/.ssh/username2-Bitbucket


Host *
UseKeychain yes
AddKeysToAgent yes
PreferredAuthentications publickey
IdentityFile ~/.ssh/username1-Bitbucket
IdentityFile ~/.ssh/username2-Bitbucket
IdentitiesOnly yes
PreferredAuthentications keyboard-interactive,password
  1. 向 ssh-agent 添加密钥:

ssh-add --apple-use-keychain ~/.ssh/username1-Bitbucket

ssh-add --apple-use-keychain ~/.ssh/username2-Bitbucket

  1. 复制 ssh 键并将其添加到您的 bitbucket 帐户中。参见 链接:

pbcopy < ~/.ssh/username1-Bitbucket.pub

pbcopy < ~/.ssh/username1-Bitbucket.pub

  1. 检查到 Bitbucket 的连接是否成功(至少一个) ,以便将 Bitbucket 添加为已知主机:

ssh -T git@bitbucket.org

  1. 在终端上使用 ssh 和 cd 将存储库克隆到存储库文件夹。

  2. 检查 reposroties remote url:

git remote -v

你会得到这样的信息:

git@bitbucket.org:companyUserName/repositoryName.git

  1. 更改存储库远程 URL:

git remote set-url origin username1@username1-Bitbucket:username1/repositoryName.git

git remote set-url origin username2@username2-Bitbucket:username2/repositoryName.git

所以我们把 git@bitbucket.org:companyUserName/repositoryName.git改成了 username1@username1-Bitbucket:username1/repositoryName.git

git-> username1username2,即帐户的用户名。

bitbucket-> username1-Bitbucketusername2-Bitbucket,即配置文件的主机别名。

companyUserName-> 它是持有存储库的帐户的用户名,在我们的示例中,存储库为 username1或 username2所有。

repositoryName-> 存储库的名称。

  1. 在两个存储库上测试您的连接,创建一个新的分支并尝试推送它:

git checkout -b newBranch

git push origin newBranch

如果两个存储库上的所有东西都正确工作,那么就完成了!

希望这个解决方案适用于每个 Mac 用户。

都是民谣!