使用SSH密钥管理多git帐户



我有多个Git账户,一个是我个人使用的,一个是公司使用的。这两个帐户源需要从我的笔记本电脑激活。

首先,我生成了两个ssh密钥:

% ssh-keygen -t ed25519 -C "my@gmail.com" -f ~/.ssh/my
% ssh-keygen -t ed25519 -C "work@company.com" -f ~/.ssh/work
第二,使用ssh-agent
% eval "$(ssh-agent -s)"
% ssh-add --apple-use-keychain ~/.ssh/my
% ssh-add --apple-use-keychain ~/.ssh/work

3、编辑SSH配置

触摸~/.ssh/config,编辑如下内容:

Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/my
IdentityFile ~/.ssh/work
# account of myself, my@gmail.com
Host my
HostName github.com
User my
IdentityFile ~/.ssh/my

# account of work, work@company.com  
Host work
HostName github.com
User work
IdentityFile ~/.ssh/work

4、添加新的SSH密钥到我的GitHub帐户

作为参考:https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

5、确保ssh-agent正在运行并加载这两个密钥

% ps -e | grep ssh-agent
% ssh-add -l
256 SHA256:RnbFaLfrSIX4Al134lkjaleiur1SMIz7+OFwx5I9RHVMewwo9eq my@gmail.com (ED25519)

我的问题是:在我重新启动macOS后,只有一个ssh密钥,我必须通过下面的命令手动激活另一个ssh密钥才能工作:

% ssh-add ~/.ssh/work
% ssh-add -l
256 SHA256:RnbFaLfrSIX4Al134lkjaleiur1SMIz7+OFwx5I9RHVMewwo9eq my@gmail.com (ED25519)
256 SHA256:QEWRrqpeowiufkndliuroqijr15u30491u3ojhjkrefaosdyflk work@company.com (ED25519)

我无法切换到工作ssh密钥当我在工作repo(如~/workcode)上工作时,但是我可以找到% git remove -v响应正确,但是当我运行% git push时得到了错误的信息,如下所示:

ERROR: Permission to work/Test.git denied to my.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

请指导我在自己工作或公司工作时如何切换到myworkssh密钥

谢谢。

你可以先修改~/.ssh/config如下:

Host *
UseKeychain yes
AddKeysToAgent yes
# account of my@gmail.com
Host mysec
HostName github.com
User git
IdentityFile ~/.ssh/mysec

# account of work@company.com  
Host work
HostName github.com
User git
IdentityFile ~/.ssh/work

,检查当前加载的ssh运行% ssh-add -l如果您想通过私人帐户或工作帐户推送代码,可以运行

% ssh-add -D

这将从代理中删除所有身份。然后你可以加载你想要的ssh密钥:

% ssh-add ~/.ssh/my% ssh-add ~/.ssh/work

只有一个SSH密钥的效果,即使你加载两个SSH密钥,所以请只加载一个SSH密钥为您推送。

在这两种情况下使用的ssh帐户应该是git:User git.

如"测试"所示。通过运行:ssh my/ssh work(或ssh git@my/ssh git@work以显式传递要连接的用户帐户)来测试您的ssh配置。

我敢说,你不需要在启动时显式加载ssh-agent中的密钥,第一个ssh连接会这样做。


[edit] @torek在评论中建议:

为了避免ssh尝试使用自己的其他密钥,您还可以将IdentitiesOnly yes添加到两个配置块中。

最新更新