使用 ssh 密钥的多 git 帐户管理

multi git account management with ssh key

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

1、我生成了两个ssh密钥:

% ssh-keygen -t ed25519 -C "my@gmail.com" -f ~/.ssh/my
% ssh-keygen -t ed25519 -C "work@company.com" -f ~/.ssh/work

2、使用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 是 运行ning 并加载了这两个密钥

% 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.

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

谢谢。

在这两种情况下,要使用的 ssh 帐户都应该是 gitUser git.

如文档 the "testing" sction 中所建议:通过 运行 测试您的 ssh 配置:ssh my / ssh work(或 ssh git@my / ssh git@work 以显式传递要连接的用户帐户)。

AFAIK,您不需要在启动时显式加载 ssh-agent 中的密钥,第一个 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-add -l 加载的 ssh 如果你想通过私人账号或工作账号推送代码,你可以运行

% ssh-add -D

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

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

即使加载了两个ssh key也只有一个ssh key有效,所以推送时请只加载一个ssh key。