TortoiseGit 的 SSH 配置原理解析

问题描述

在配置 TortoiseGit 的教程中,我们经常可以看到为了配置 ssh key 而使用 puttygen 生成 key,然后再进行很多操作。而有时我们不做任何配置就能使用之前在 git bash 中配置过的 ssh key。

原因分析

Tortoisegit 使用 TortoiseGitPlink 作为默认的 ssh 客户端。而 PuTTY and TortoiseGitPlink 是不读取 .ssh/config 的配置的。这两者的配置都是写在注册表中的。

但是,在 Settings/Network/SSH 这里填写 ssh.exe 的话,会使用 PATH 中的 ssh.exe,也就是 openssh,openssh 是会读取 .ssh/config 的。因此就能与 git bash 共用 key ,不必使用 TortoiseGitPlink 及 putty 版本的 key 了。

TortoiseGit 的 SSH 配置原理解析
另外,填写 ssh.exe 不必写全称。如果把 SSH client 这里填写的内容清空的话,就会变成使用 TortoiseGitPlink.或者也可以主动写成:<这里填 TortoiseGit 安装目录>\bin\TortoisePlink.exe 以使用 TortoisePlink。

总结

  1. 当 TortoiseGit 使用 openssh 作为 ssh client 时,.ssh/config 里面的配置会生效,于是 git bash 能访问的库,用 TortoiseGit 也能访问。
  2. 当 TortoiseGit 使用 TortoiseGitPlink 作为 ssh client 时,.ssh/config 里面的配置无效,需要按照一些步骤生成 putty 版本的 key 并设置好。
  3. 在比较高版本的TortoiseGit 和 windows 中,ssh.exe 默认就填写了,也就是默认 openssh 作为 ssh client。但是如果 ssh.exe 找不到了(可能由于 PATH 改变或者系统中没有 ssh.exe而导致),那么 TortoiseGitPlink 就会变成默认使用的 ssh 客户端,这样从 openssh 切到了 TortoiseGitPlink 就会导致之前配置好的库无法再 ssh 访问了。

参考

PuTTY and TortoiseGitPlink do not respect .ssh/config (as described in e.g. Multiple GitHub Accounts & SSH Config or https://gist.github.com/jexchan/2351996). Both tools store, like Windows tools, their configuration in registry.
https://*.com/q/3225862/3906760
https://tortoisegit.org/support/faq/#sshconfigignored
Windows下TortoiseGit和Git配置使用同一ssh私钥
TortoiseGit git ssh 配置 详细步骤