在github / bitbucket上使用多个帐号/多个标识

时间:2013-09-10 17:09:59

标签: git github ssh private-key

我在github / bitbucket上有多个帐户,每个帐户有一个唯一的私钥 - 公钥对。当我需要推送到不同帐户创建的回购时,问题就出现了,除非我进入默认帐户(我最初创建的帐户),否则我几乎肯定会被拒绝访问。

在推送之前有没有办法切换到不同的凭据?我在Macintosh机器上使用Source Tree。我不想在需要推送时手动重命名~/.ssh/id_rsa

非常感谢您的投入!

3 个答案:

答案 0 :(得分:6)

您可以按照此处的说明使用~/.ssh/config

https://confluence.atlassian.com/pages/viewpage.action?pageId=271943168

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

否则,如果您只想在执行推送之前“切换帐户”,则可以使用ssh-add。打开Terminal.app,运行ssh-agent并运行ssh-add ~/.ssh/path_to_your_account_id_rsa,然后执行推送。 推送后,您可以通过运行:ssh-add ~/.ssh/id_rsa切换回默认帐户。

希望它有所帮助!

答案 1 :(得分:4)

另一方面,如果您通常使用一个默认帐户进行提取/推送,并且您偶尔会将更改推送到其他帐户,则可以为其他帐户添加指向https网址的远程帐户到你的.git/config文件,虽然你必须每次都输入你的github密码,只有默认的github帐户(对应启用的密钥)才会使用ssh密钥。

如下所示

[remote "origin"]
    url = git@github.org:account1/repository.git 
    #This one uses the default ssh keys

[remote "account2"]
    url = https://github.com/account2/repository.git 
    #This will need password while pushing/pulling
[remote "account3"]
    url = https://github.com/account3/repository.git 
    #This will need password while pushing/pulling

然后,对于正常操作,您可以使用ssh键推/拉

git pull origin branch_name
git push origin branch_name

要推送到其他帐户的回购,您可以通过密码

通过https推送
git push account2 branch_name
git push account3 branch_name

答案 2 :(得分:3)

对于BitBucket,我发现对我来说最有效的方法是a)将密钥添加到我的~/.ssh/config,以及b)更改项目的本地配置。

例如:

# ~/.ssh/config
Host work
  HostName bitbucket.org
  IdentityFile ~/.ssh/work

Host personal
  HostName bitbucket.org
  IdentityFile ~/.ssh/personal

然后在我的项目的本地git配置中,我将远程URL的主机部分更改为适当的主机。例如,在以下文件中:

# ~/repos/myworkproject/.git/config
# or you can access this file by going into the repo and running `git config -e`
...snip...
[remote "origin"]
  fetch = ...
  url = git@bitbucket.org:mybitbucketusername/myworkproject.git

将网址行更改为:

url = git@work:mybitbucketusername/myworkproject.git