git 如何在同一系统中维护多个ssh key的多个bitbucket账户

u5rb5r59  于 2023-05-05  发布在  Git
关注(0)|答案(9)|浏览(148)

我有多个Git帐户,一个是我个人使用的,一个是公司使用的。这两个帐户源需要从我的笔记本电脑激活。这里我生成了两个ssh密钥,如id_rsa.pub,id_benwork_rsa.pub,并将git的config配置为

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

所以这是我的问题:当推送到任何repo git询问第一个ssh_key密码时。每次我user.name在git config中将www.example.com改为git config user.name“mybitbucketusername”。所以请告诉我如何在同一个系统中维护多个git账户和多个ssh键

我试了How to work with multiple ssh keysMultiple bitbucket accounts,但没有用
push using multiple account / multiple identity on github / bitbucket到目前为止还是有点帮助的

vzgqcmou

vzgqcmou1#

为Mac OSX、GitBash、Linux创建多个身份

此时,您应该已经创建了至少一个默认标识。要查看是否已经有了默认标识,请列出.ssh目录的内容。默认标识文件显示为id_encrypt和id_encrypt.pub对。加密值为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.打开终端窗口。
1.编辑~/.ssh/config文件。如果没有配置文件,请创建一个。
1.为每个身份组合添加别名,例如:

Host workid
 HostName bitbucket.org
 IdentityFile ~/.ssh/workid
Host personalid
 HostName bitbucket.org
 IdentityFile ~/.ssh/personalid

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

将每个密钥加载到相应的Bitbucket账户中

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

使用SSH和您的别名配置克隆仓库

要使用您配置的多个SSH身份之一克隆存储库,请克隆存储库并在SSH URL中使用您的别名。要自己尝试,请登录Bitbucket并执行以下操作:
1.导航到存储库概述。
1.显示SSH URL。
例如,ssh URL为:
git@bitbucket.org:accountname/reponame.git
然后使用以下命令克隆存储库:
git clone git@personalid:accountname/responame.git
这是指官方解决方案Configure multiple SSH identities for GitBash, Mac OSX, & Linux,它对我来说很好!

sq1bmfud

sq1bmfud2#

编辑你的~/.ssh/config文件如下!

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

更改远程git url,在'@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
u5i3ibmn

u5i3ibmn3#

上述~/.ssh/config方法的另一种方法是在clone命令本身中指定配置变量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及更高版本中得到支持。

jei2mxaa

jei2mxaa4#

在网上搜索了很多,在社区的帮助下,我想出了如何在我的Mac - MacOS Monterey 上配置2个不同的Bitbuckets帐户。
假设你有两个bitbucket帐户,用户名分别为username 1和username 12。
1.打开终端并为两个用户名创建2 ssh file 2:
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
~/.ssh/config文件应该如下所示:

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密钥并将其添加到您的bitbuckets帐户。参见link
pbcopy < ~/.ssh/username1-Bitbucket.pub
pbcopy < ~/.ssh/username1-Bitbucket.pub
1.检查是否成功连接到bitbucket(至少一个),以便将Bitbucket添加为已知主机:
ssh -T git@bitbucket.org
1.在终端上使用ssh和cd将您的存储库克隆到存储库文件夹。
1.检查reposiroties远程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-〉它是拥有存储库的帐户的用户名,在我们的例子中,存储库由username 1或username 2拥有。
repositoryName-〉仓库的名称。
1.在两个存储库上测试您的连接,创建一个新分支并尝试推送它:
git checkout -b newBranch
git push origin newBranch
如果两个仓库上的一切都正常工作,那么就完成了!
希望这个解决方案适用于每一个Mac用户。
都是人!

ao218c7q

ao218c7q5#

前端编辑:Bitbucket现在似乎已经停止支持下面描述的机制。到今天为止,我使用的是上面的@ shannon-chou的解决方案,它运行得很好。留下的帖子,以供历史参考。--JBC,2019-06-23
在2016年,BitBucket似乎增加了对一个稍微简单的解决方案的支持,该解决方案不涉及额外的.ssh配置文件futzing。具体来说,现在可以使用ssh用户名来指示您正在访问的帐户。例如,不使用git url
git@bitbucket.org:efhutton/squanzle.git
你可以使用git url
efhutton@bitbucket.org:efhutton/squanze.git
(or ssh:efhutton@bitbucket.org/efhutton/squanze.git,看起来是等效的)
基本问题是ssh客户端将以固定的顺序呈现ssh-key标识。假设您的工作帐户名为bobobogo,您的私人帐户名为efhutton,并且您的ssh客户端配置为首先提供在bobobogo注册的密钥。如果你试图,比如说,在一个与efhutton关联的账户上获取,那么你的ssh客户端提供bobobogo密钥,bitbucket接受它,然后观察到bobobogo账户没有访问efhutton/squanze仓库的权限,并阻止你。使用新的机制,你告诉bitbucket你想使用一个为efhutton帐户授权的密钥,所以当你的ssh客户端呈现为bobobogo注册的密钥时,bitbucket会拒绝它,你的ssh客户端可以呈现下一个密钥,它是 * 注册的efhutton帐户。
详细信息在这篇博客文章
https://bitbucket.org/blog/better-support-multiple-ssh-keys
编辑:你看到了顶部的消息,对吗?

zbwhf8kr

zbwhf8kr6#

请按照Github要点进行参考。https://gist.github.com/shakeeb91/cd3d3c387f339fbd93ac7388b3c885e0
1)在主目录的~/.ssh/config中创建Config文件。2)添加代码:

Host myaccount2access
   HostName bitbucket.org
   User git
   IdentityFile /home/shakeeb/.ssh/newsshkey
   IdentitiesOnly yes
and then clone the repository.

也不愿在下面跑。确保使用您自己的repo详细信息。
git clone git@myaccount2access:shakeeb91/repository.git

l7mqbcuq

l7mqbcuq7#

如果您收到一个“ssh:无法解析主机名:名称或服务未知”错误,以下内容可能会有所帮助。
正如Shannon Chou的回答所指出的,您希望创建SSH别名。GitHub、BitBucket等有关于如何做到这一点的说明,但我在Windows 10上遇到了一个问题,可能会帮助其他人。SSH有两个不同的配置文件:系统范围配置文件和用户特定配置文件。我读到的说明,包括Shannon Chou的说明,都说要将别名添加到用户特定的配置文件中,该文件位于~/.ssh/.config
在我的例子中,我需要将别名添加到系统级配置文件中,在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文件中查找别名。

gudnpqoy

gudnpqoy8#

如果其他评论不起作用,下面是我为我的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,但失败了。这就是我的工作。
让我知道如果我错过了什么,这是补充其他评论。
2019

neskvpey

neskvpey9#

如果您想为不同的项目使用不同的身份密钥。你可以简单地使用git命令和配置如下:

  • 克隆时:
  • git clone -c "core.sshCommand=ssh -i ~/.ssh/BitbucketKey1 -F /dev/null" {your repo url}
  • 对于现有存储库:
  • 转到.git文件夹。
  • 编辑配置文件。
  • 在[核心]一节下面一行添加
  • sshCommand = "ssh -i ~/.ssh/BitbucketKey1 -F /dev/null"

相关问题