我有多个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.
请指导我在自己工作或公司工作时如何切换到my
或work
ssh密钥
谢谢。
你可以先修改~/.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
添加到两个配置块中。