$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
首先,为密钥对命名 - 添加描述性名称将帮助您记住哪个密钥用于哪个用户/远程
# change to your ~/.ssh directory
$ cd ~/.ssh
# rename the private key
$ mv id_rsa github-mainuser
# rename the public key
$ mv id_rsa.pub github-mainuser.pub
# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
# my github script
cd ~/.ssh
if [ -f git_dhoerl -a -f git_dhoerl.pub -a -f config_dhoerl ]
then
;
else
echo "Error: missing new files"
exit 1
fi
# Save a copy in /tmp, just in case
cp id_rsa /tmp
cp id_rsa.pub /tmp
cp config /tmp
echo "Saved old files in /tmp, just in case"
rm id_rsa
rm id_rsa.pub
rm config
echo "Removed current links/files"
ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config
git config --global user.email "dhoerl@<company>.com"
git config --global github.user "dhoerl"
git config --global github.token "whatever_it_is"
ssh-add -D
Associate ssh key with gitHub account :为您的第二个帐户重复上述步骤 .
Edit the global git configuration: 最后一步是确保全局配置文件知道所有github帐户(可以这么说) . 运行 git config --global --edit 编辑此全局文件,如果打开vim并且您不知道如何使用它,请按 i 进入插入模式,编辑如下文件,然后按esc,然后按 :wq 退出插入模式:
[inside this square brackets give a name to the followed acc.] name = github_username email = github_emailaddress [any other name] name = github_username email = github_email [credential] helper = osxkeychain useHttpPath = true
17 回答
您不必为个人和工作维护两个不同的帐户 . 实际上,Github建议您维护一个帐户并帮助您合并两者 .
如果您认为无需维护多个帐户,请按照以下链接进行合并 .
https://help.github.com/articles/merging-multiple-user-accounts/
更简单,更容易修复,以避免混淆..
对于Windows用户,可以为不同的项目使用多个或不同的git帐户 .
以下步骤:转到“控制面板”并搜索“凭据管理器” . 然后转到Credential Manager - > Windows Credentials
现在删除Generic Credentials Heading下的 git:https//github.com 节点
这将删除当前凭据 . 现在你可以通过git pull it添加任何项目会要求输入用户名和密码 .
当您遇到与其他帐户的任何问题时,请执行相同的过程 .
谢谢
refer to image
我发现这个宝石非常有用:sshwitch
https://github.com/agush22/sshwitch
http://rubygems.org/gems/sshwitch
它有助于切换ssh密钥 . 记得先备份一切!
另外为了确保提交具有与之关联的正确电子邮件地址,我确保〜/ .gitconfig文件具有正确的电子邮件地址 .
您需要做的就是使用多个SSH密钥对配置SSH设置 .
此链接很容易理解(感谢Eric):http://code.tutsplus.com/tutorials/quick-tip-how-to-work-with-github-and-multiple-accounts--net-22574
生成SSH密钥(Win / msysgit)https://help.github.com/articles/generating-an-ssh-key/
此外,如果您使用不同的角色使用多个存储库,则需要确保您的各个存储库相应地覆盖了用户设置:
设置用户名,电子邮件和GitHub令牌 - 覆盖个别回购的设置https://help.github.com/articles/setting-your-commit-email-address-in-git/
希望这可以帮助 .
Note: 你们中的一些人可能需要不同的电子邮件用于不同的存储库,从git 2.13 你可以通过编辑全局配置文件在目录基础上设置电子邮件:
~/.gitconfig
使用如下条件:然后您的工作特定config~ / work / .gitconfig将如下所示:
感谢@alexg在评论中告知我这一点 .
使用HTTPS:
将远程URL更改为https:
你很高兴去:
为了确保提交显示为USERNAME执行,也可以为此项目设置user.name和user.email:
Getting into shape
要在单独的github / bitbucket /任何帐户下管理git repo,您只需生成一个新的SSH密钥 .
但在我们开始使用您的第二个身份推动/拉动回购之前,我们必须让您成型 - 让我们假设您的系统设置了典型的
id_rsa
和id_rsa.pub
密钥对 . 现在你的tree ~/.ssh
看起来像这样首先,为密钥对命名 - 添加描述性名称将帮助您记住哪个密钥用于哪个用户/远程
接下来,让我们generate a new key pair - 这里我将命名为新密钥
github-otheruser
现在,当我们看到
tree ~/.ssh
时,我们看到了接下来,我们需要设置一个
~/.ssh/config
文件来定义我们的密钥配置 . 我们将用proper owner-read/write-only permissions创建它用您喜欢的编辑器打开它,并添加以下内容
据推测,您将有一些与您的主要github身份相关联的现有回购 . 出于这个原因,"default" github.com
Host
设置为使用您的mainuser
键 . 如果您没有't want to favour one account over another, I'将向您展示如何更新系统上的现有存储库以使用更新的ssh配置 .Add your new SSH key to github
转到github.com/settings/keys添加新的 public 键
您可以使用以下方法获取公钥内容:将其复制/粘贴到github
现在您的新用户身份已全部设置 - 下面我们将向您展示如何使用它 .
Getting stuff done: cloning a repo
那么这是如何与git和github一起工作的呢?好吧,因为你不能没有鸡蛋和鸡蛋,我们将看看克隆一个现有的回购 . 如果您的工作场所有新的github帐户,并且您已被添加到公司项目中,则这种情况可能适用于您 .
假设
github.com/someorg/somerepo
已存在并且您已添加到其中 - 克隆就像这样简单bolded 部分必须与我们在
~/.ssh/config
文件中设置的Host
名称相匹配 . 这正确地将git连接到相应的IdentityFile
并使用github正确地验证你Getting stuff done: creating a new repo
好吧,因为你可以在你的二级账户上发布一个新的回购 . 这种情况适用于使用其辅助github帐户创建新内容的用户 .
让我们假设你已经在本地完成了一些工作,现在你已经准备好推向github了 . 如果你愿意,你可以跟随我
现在配置此repo以使用identity
现在进行第一次提交
检查提交以查看使用git log的新身份
好吧,是时候推向github了!由于github还不知道我们的新回购,首先去github.com/new并创建你的新回购 - 将它命名为 somerepo
现在,使用正确的将配置文件配置为"talk"到github身份/凭证,我们添加了一个遥控器 . 假设您的新帐户的github用户名是
someuser
...bolded 部分绝对是关键的,它必须与我们在
~/.ssh/config
文件中定义的Host
匹配最后,推动回购
Update an existing repo to use a new SSH configuration
假设您已经克隆了一些repo,但现在您想要使用新的SSH配置 . 在上面的示例中,我们通过在SSH配置文件中将之前的
id_rsa
/id_rsa.pub
密钥对分配给Host github.com
来保持现有的回购 . 有人认为他们中的一个是"default"配置 - 我宁愿明确每一个 .在我们这之前
所以我们现在将其更新为此( bold 中的更改)
但这意味着现在任何带有
github.com
遥控器的现有仓库将不再使用此身份文件 . 但是,请简单解决这个问题 .要更新任何现有的repo以使用新的SSH配置,只需打开repo的git配置文件并更新url!
更新远程原点字段( bold 中的更改)
而已 . 现在你可以
push
/pull
到你心中的内容SSH key file permissions
如果您的公钥无法正常运行时遇到问题,SSH对
~/.ssh
目录中允许的file permissions及相应的密钥文件非常严格根据经验,任何目录都应该是
700
,任何文件应该是600
- 这意味着它们是所有者读/写 - 没有其他组/用户可以读/写它们How I manage my SSH keys
我为每个连接的主机管理单独的SSH密钥,这样如果任何一个密钥被破坏,我就不必在我使用该密钥的每个其他地方更新密钥 . 这就像当你从Adobe获得有关其用户信息的1.5亿被盗的通知时 - 现在你必须取消该信用卡并更新依赖它的每项服务 - 这是多么令人讨厌 .
这是我的
~/.ssh
目录的样子:每个用户都有一个.pem
密钥,位于我连接的每个域的文件夹中 . 我使用.pem
键,所以每个键只需要一个文件 .这是我相应的
/.ssh/config
文件 - 显然github的内容与回答关于github的这个问题有关,但这个答案旨在让你掌握在任意数量的服务/机器上管理你的ssh身份的知识 .Getting your SSH public key from a PEM key
上面你注意到我每个键只有一个文件 . 当我需要提供公钥时,我只需根据需要生成它 .
所以当github请求你的ssh公钥时,运行这个命令将公钥输出到stdout - 在需要的地方复制/粘贴
请注意,这也是我用于将密钥添加到任何远程计算机的过程 .
ssh-rsa AAAA...
值将复制到遥控器的~/.ssh/authorized_keys
文件中Converting your id_rsa/id_rsa.pub key pairs to PEM format
所以你想驯服你的关键文件并减少一些文件系统的残缺?将密钥对转换为单个PEM非常简单
或者,继上面的示例之后,我们重命名为
id_rsa -> github-mainuser
和id_rsa.pub -> github-mainuser.pub
- 所以现在只是为了确保我们已将此转换为正确,您将需要验证生成的公钥是否与您的旧公钥匹配
现在您已经拥有了
github-mainuser.pem
文件,您可以安全地删除旧的github-mainuser
和github-mainuser.pub
文件 - 只需要PEM文件;只需在需要时生成公钥^ _ ^Creating PEM keys from scratch
您无需创建私钥/公钥对,然后转换为单个PEM密钥 . 您可以直接创建PEM密钥 .
让我们创建一个
newuser.pem
获取SSH公钥是一样的
通过在〜/ .ssh / config中为github.com创建不同的主机别名,并为每个主机别名提供自己的ssh密钥,您可以轻松地使用多个github帐户而不会产生混淆 . 那是因为github.com不是用户区分的,它总是只是git,而是用你用来连接的ssh键 . 只需使用自己的主机别名配置远程起源 . “
上述摘要由以下博客文章中的评论提供 .
我发现这个解释最清楚了 . 它对我有用,至少截至2012年4月 .
http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/
由mishaba链接的http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/的详细信息对我来说非常有效 .
从该页面:
然后将该文件编辑为类似的内容(每个帐户一个条目):
我用shell脚本将我切换到我想要“活跃”的任何帐户 . 基本上,您从一个全新的开始,正确配置一个帐户并运行,然后将这些文件移动到具有正确前缀的名称 . 从那时起,您可以使用命令“github”或“gitxyz”来切换:
我对此很幸运 . 我还在Xcode(为你的Mac用户)创建了一个运行脚本,所以它不会构建我的项目,除非我有正确的设置(因为它使用git):
在Dependencies之后运行脚本(使用/ bin / ksh作为shell):
编辑:添加新文件存在的测试和复制旧文件到/ tmp以通过@naomik下面的注释 .
转到〜/ .ssh
创建一个名为config的文件(没有扩展名)
打开配置文件并添加以下代码 . (根据您的帐户更改)
帐户1
如下添加远程URL
帐户1
这个答案适用于 beginners (none-git gurus) . 我最近有这个问题,也许它只是我,但大多数答案似乎需要相当提前了解git . 在阅读了几个堆栈溢出答案(包括此线程)后,以下是我需要采取的步骤,以便在GitHub帐户之间轻松切换(例如假设两个GitHub帐户,github.com / personal和gitHub.com/work):
Check for existing ssh keys: 打开终端并运行此命令以查看/列出现有的ssh密钥
ls -al ~/.ssh
扩展名为
.pub
的文件是您的ssh密钥,因此您应该为personal
和work
帐户分配两个 . 如果只有一个或没有,那么生成其他明智的时间就跳过这个 .生成ssh密钥:登录github(个人或工作人员),导航到设置并复制相关的电子邮件 .
现在回到终端并运行
ssh-keygen -t rsa -C "the copied email"
,你会看到:生成公钥/私钥rsa密钥对 .
输入要保存密钥的文件(/.../.ssh/id_rsa):
id_rsa是即将生成的ssh密钥的默认名称,因此请复制路径并重命名默认值,例如:
/.../.ssh/id_rsa_work
如果为工作帐户生成 . 提供密码或只是输入忽略,你会读到像钥匙的randomart图像是:和图像 . 完成 .为您的第二个github帐户再次重复此步骤 . 确保使用正确的电子邮件地址和不同的ssh密钥名称(例如id_rsa_personal)以避免覆盖 .
在此阶段,再次运行
ls -al ~/.ssh
时应该会看到两个ssh键 .Associate ssh key with gitHub account: 下一步是复制其中一个ssh密钥,运行此命令但替换自己的ssh密钥名称:
pbcopy < ~/.ssh/id_rsa_work.pub
,将id_rsa_work.pub
替换为您所谓的ssh密钥 .现在我们的ssh密钥被复制到剪贴板,返回到github帐户[如果您复制的ssh密钥是
id_rsa_work
,请确保您已登录到工作帐户]并导航到设置 - SSH和GPG密钥,然后单击新SSH密钥按钮(不是新的GPG密钥顺便提一下:D)
为此密钥提供一些 Headers ,粘贴密钥并单击“添加SSH密钥” . 你现在已经成功添加了ssh密钥或者注意到它一直都在那里很好(或者你得到一个错误,因为你选择了新的GPG密钥而不是新的SSH密钥:D) .
Associate ssh key with gitHub account :为您的第二个帐户重复上述步骤 .
Edit the global git configuration: 最后一步是确保全局配置文件知道所有github帐户(可以这么说) .
运行
git config --global --edit
编辑此全局文件,如果打开vim并且您不知道如何使用它,请按i
进入插入模式,编辑如下文件,然后按esc,然后按:wq
退出插入模式:[inside this square brackets give a name to the followed acc.] name = github_username email = github_emailaddress [any other name] name = github_username email = github_email [credential] helper = osxkeychain useHttpPath = true
完成!,现在当你试图从回购中推或拉时,你会被问到哪个GitHub帐户应该与这个回购链接,并且只询问一次,本地配置会记住这个链接,而不是全局配置,这样你就可以工作了在不同的回购中,与不同的帐户链接,而不必每次都编辑全局配置 .
除了为多个帐户创建多个SSH密钥之外,您还可以考虑使用相同的帐户电子邮件在每个项目上添加协作者并永久存储密码 .
我使用不同的电子邮件设置了多个帐户,然后将每个帐户上的相同用户和电子邮件作为其中一个协作者 . 通过这种方式,我可以访问所有帐户,无需添加SSH密钥,或切换到另一个用户名,并通过电子邮件进行身份验证 .
与其他答案不同,您需要在同一台机器上使用 few steps 来使用 two different github 帐户,对我而言,它在 two steps 中有效 .
你只需要:
1)为
~/.ssh
位置下的每个帐户生成 SSH public and private key pair ,其名称和位置不同2)将生成的 public 密钥添加到 Settings >> SSH and GPG keys >> New SSH Key 下的相应帐户 .
要生成 SSH public and private key pairs ,请使用以下命令:
作为上述命令的结果,将为您的 work 帐户(ex-git.work.com)创建
id_rsa_WORK
和id_rsa_WORK.pub
文件,并为您的 personal 帐户(ex-github.com)创建id_rsa_PERSONAL
和id_rsa_PERSONAL.pub
.创建后,复制每个公共(
*.pub
)文件中的内容,并为每个帐户执行步骤2 .PS :如果您的两个帐户的主机名不同,则无需为其他答案中提及的
~/.ssh/config
文件下的每个git帐户创建主机条目 .另一种更简单的方法是使用多个桌面应用程序,比如我在做什么,在Github桌面上使用帐户A,同时在Github Kraken上使用帐户B
如果您碰巧安装了WSL,您可以拥有两个单独的git帐户 - 一个在WSL上,另一个在Windows中 .
最简单直接的方法(恕我直言) - 没有配置文件没有太多的麻烦
只需创建另一个ssh密钥 .
假设您有一个新工作GitHub帐户,只需为它创建一个新密钥:
现在你应该有旧的和新的,看到它们,运行:
你只需要运行上面一次 .
从现在开始,每次要在两者之间切换时,只需运行:
为了切换到旧的,再次运行:
刚为Windows解决这个问题,使用每个repo的凭据:
凭证的格式 . https://github.com . 告知凭证助手凭证的URL . 'useHttpPath'告诉凭证管理器使用凭证的路径 . 如果省略useHttpPath,则凭证管理器将为https://github.com存储一个凭证 . 如果包含它,那么凭证管理器将存储多个凭证,这是我真正想要的 .