【问题标题】:multi git account management with ssh key使用 ssh 密钥进行多 git 帐户管理
【发布时间】:2022-06-10 19:17:38
【问题描述】:

我有多个 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、向我的 GitHub 帐户添加新的 SSH 密钥

作为参考: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)

并且我在处理工作存储库(如 ~/workcode)时无法切换到工作 ssh 密钥,但我可以找到 % 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

标签: git macos github ssh


【解决方案1】:

你可以先修改~/.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供你推送。

【讨论】:

    【解决方案2】:

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

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

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


    [编辑] 正如 @torek 在 cmets 中所建议的:

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

    【讨论】:

    • 在这两种配置中添加IdentitiesOnly yes 也是明智之举,这样 ssh 就不会先尝试“错误”键(或者根本不会尝试)。
    猜你喜欢
    • 2017-07-02
    • 2020-04-09
    • 2020-08-22
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2017-06-02
    • 2013-02-25
    • 2014-07-24
    相关资源
    最近更新 更多