在 Windows 10 上为 GitHub 启用多个 SSH 密钥

NM *_*ldo 3 windows git ssh github

我有 2 个 GitHub 帐户,我无法为这两个帐户使用相同的公钥。我已经生成了2个ssh密钥

\n
    \n
  • \xe2\x80\xaaC:\\Users\\{User_Name}\\.ssh\\id_rsa
  • \n
  • \xe2\x80\xaaC:\\Users\\{User_Name}\\.ssh\\id_rsa_another
  • \n
\n

我的问题是,如何在 Windows 上使用多个 ssh 密钥?在Linux上,我只需使用ssh-add命令添加即可,但在Windows上,这个命令不存在。

\n

我做了什么才能使另一个 ssh 密钥工作,我必须将id_rsatoid_rsa_tempid_rsa_anotherto更改为id_rsa。我知道这很愚蠢。

\n

Von*_*onC 5

首先,ssh-add 存在于 Windows 上,作为 Git For Windows 的一部分:

C:\Users\vonc>where ssh-add
C:\Program Files\Git\usr\bin\ssh-add.exe
Run Code Online (Sandbox Code Playgroud)

它需要缓存保护私钥的密码(这并不总是需要的,因为您可以创建没有密码的私钥)

使用不同的帐户,如评论所述,使用 %USERPROFILE%.ssh\config 文件,其中包含:

Host gh1
  Hostname github.com
  User git
  IdentityFile ~/.ssh/id_rsa
Host gh2
  Hostname github.com
  User git
  IdentityFile ~/.ssh/id_rsa_another
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法测试它们:

ssh -Tv gh1
ssh -Tv gh2
Run Code Online (Sandbox Code Playgroud)

您应该看到每个键都有不同的“欢迎”消息。

用于克隆存储库的 URL 为:

gh1:user1/repo1
gh2:user2/repo2
Run Code Online (Sandbox Code Playgroud)

当且仅当您的 ssh 私钥已加密(受密码短语保护)时,您需要一个 .bashrc 来启动 SSH 代理,并在其中注册您的密钥,从而有效地缓存所述密钥。

请参阅“在 Windows 上的 Git 上自动启动 ssh-agent

ssh-agent打开 bash 或 Git shell 时可以自动运行。
复制以下行并将其粘贴到Git shell 中的~/.bashrc( %USERPROFILE%/.bashrc) 文件中:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
    ssh-add ~/.ssh/id_rsa_another
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
    ssh-add ~/.ssh/id_rsa_another
fi

unset env
Run Code Online (Sandbox Code Playgroud)

您必须在第一次启动时输入密码,然后不再输入:所述密码将由代理缓存。