macOS 上的 SourceTree 不断询问 SSH 密钥密码,或者如果密码存储在钥匙串中则挂起

SourceTree on macOS keeps asking for SSH key password, or hangs if password is stored in keychain

多年来,我一直在 Mac 上愉快地使用 SourceTree,很少遇到问题。几周前,在更新 macOS 后,它突然完全停止工作。每当我尝试 clone/fetch/push/pull/whatever 到 任何 我的 Git 存储库时,SourceTree 要么

  1. 在我输入 SSH 密钥密码后立即一遍又一遍地询问(如果我没有将其保存在钥匙串中),或者
  2. 如果密码存储在钥匙串中,则永远挂在进程中window。

这不是存储库的问题。 Github 也发生了这种情况,使用与之前完全相同的回购和设置。密钥有 chmod 400,和以前一样,它是默认密钥 ~/.ssh/id_rsa。尝试使用 SourceTree 和系统 Git 中的嵌入式 Git,但无济于事。我同时切换到另一个应用程序正常工作。

我不记得是哪个 macOS 更新导致了这些问题,但我现在使用的是最新的 macOS Catalina 10.15.4 和 SourceTree 4.0.1。由于另一个问题,我将磁盘彻底擦干净并从头开始重新安装所有内容,但它仍然无法正常工作。 我找不到任何关于阻止 SourceTree 访问密钥本身的新访问限制,或者如果是这种情况我如何允许访问。这让我抓狂,同时我已经切换到另一个应用程序,但如果允许的话,我真的很想继续使用 SourceTree。

编辑:当我在 macOS 上使用 SourceTree 时,我的所有存储库都会受到此问题的影响。所有回购协议也被其他人使用,当我使用另一个应用程序时,它也适用于我的 Mac。即使是我另一台笔记本电脑上 Windows 的 SourceTree,所有这些都使用相同的密钥。

几个月前我遇到了类似的问题,这对我有用。 * 打开钥匙串访问 * 在 Login/Passwords 部分下查找 SourceTree 应用程序密码 * Select密码,右键删除密码

这次当我输入 SourceTree 的密码时,应用程序毫无问题地接受了密码并将其保存到钥匙串中。

我所做的一些事情可能首先导致了这个问题。我更新了我的 macOS。大约在同一时间,我还在 Github 中启用了双因素身份验证。可能是钥匙串中保存的密码与更新后我提供的密码之间的冲突导致了这个问题。希望这有帮助。

感谢有用的回复和评论。事实证明,SourceTree 没有将服务器的指纹添加到 ~/.ssh/known_hosts 文件中,并且默默地失败了。

轻松修复 - 在命令行上导航到您的 repo 文件夹,然后 运行 一个简单的 git 命令,例如:

git fetch origin --dry-run

因为是干的运行,所以不会发生任何事情,但是git可执行文件会询问是否连接到服务器,并将其添加到known_hosts文件中。

在我将其添加到我的 .ssh/config 之前对我没有任何作用:

UseKeychain yes