SourceTree在每次重新启动时都要求输入SSH认证密码

25
在SourceTree中,我正在使用OpenSSH作为身份验证方式,并像这样创建并添加了我的SSH密钥(在Windows上):
  1. ssh-keygen -t rsa -C“my@email.com”(并输入文件名、密码等)

  2. 将密钥添加到SSH代理: eval "$(ssh-agent)" ssh-add id_rsa

  3. 使用:cat id_rsa.pub将公钥打印出来,然后将其添加到GitLab的SSH密钥中。

  4. 通过“工具 > 添加SSH密钥”,并输入密码(“工具 > 选项 > SSH客户端配置”中选择了OpenSSH),将公钥添加到SourceTree。

完成这些步骤后,我能够推送和拉取代码。但是,每次我重新启动 SourceTree 时,终端都会弹出并且我需要再次输入密码 *。如何使 SourceTree / SSH 代理记住这个密码呢?
附注:我的密钥保存在类似于 /d/MyName/Gitlab/ 的目录中,而不是 ~/.ssh/,但这应该不是问题,对吧?
编辑:
* 终端显示的消息: SourceTree is loading your SSH key into the agent for authentication Please enter your passphrase if prompted to do so Enter passphrase for D:\MyName\GitLab\.ssh\id_rsa: 编辑2:
这个解决方案对我也没有用。

“密码”是指远程服务器的密码还是SSH密钥的口令短语? - Kenster
我每次重新启动SourceTree时需要输入的密码是密钥短语(也就是我在第一步创建密钥时使用的那个,然后在第四步再次使用)。我已经编辑了上面的问题并包含了终端中的消息。希望现在我的问题更清晰了? - Patrick Kuijpers
你尝试过使用Putty/Pageant作为ssh-agent吗?你可以在SourceTree中使用工具 > 启动SSH Agent来启动它。 - nwinkler
我也遇到了这个问题。SourceTree以前没有出现过这种情况。我希望这是一个会在更新中修复的错误,但几周后它仍然存在。你找到问题所在了吗? - jwinn
3
在Windows上不行,但我还没尝试过putty。具体的问题对我来说已经不适用了,因为我换到了Mac,尽管我在那里也遇到了一个非常类似的问题(每次重新启动机器都需要重新输入密码)。这解决了我的问题(在Mac上):在命令工具中,使用以下命令添加ssh密钥:"ssh-add -K ~/.ssh/id_rsa"(-K用于将其保存在钥匙串中)。所以在Windows上还没有修复。我唯一能说的是:请检查正确平台的逐步指南,因为确切的实现可能会在细节上有所不同。 - Patrick Kuijpers
4个回答

6
你可以使用 Windows OpenSSH ssh-agent 来管理你的密钥。 问题在于,Windows 上的 Sourcetree 希望启动自己的 ssh-agent 实例,而不是使用已经运行的服务。即使你能让它正常工作,它仍然会在启动时提示你输入密钥密码,因为 Sourcetree 的 ssh-agent 进程没有将你的密钥保存到 Windows 密钥链中。
有很多关于如何使用 Pageant 作为你的 ssh agent 的指南,但这不是你来到这里的原因。你来这里是因为你想使用 OpenSSH agent,带有 OpenSSH 格式的密钥、带有口令,但又不想在各种地方都被提示输入口令。
诀窍是将所有请求代理到 Pageant,然后再通过 OpenSSH agent 处理。
安装 OpenSSH。 启动 ssh-agent 服务并设置为自动。 使用以下命令将你的私钥添加到代理中。
ssh-add <key_file>

将您的公钥添加到您希望进行身份验证的主机中。
测试您是否可以通过SSH进行身份验证。
ssh -T git@github.com

当您登录Windows帐户时,您的私钥将自动加载,您不必再提供密码。

为了让Sourcetree、WinSCP和Fabric等程序和库使用ssh-agent提供密钥,而不是像通常使用Pageant, 这里有一个绝妙的程序 https://github.com/ndbeals/winssh-pageant

按照说明安装winssh-pageant,并将其安排为在Windows启动时启动的任务。

现在,所有对Pageant的命名管道的调用都将代理到OpenSSH代理。

使SourceTree与OpenSSH配合工作的最后一步有点反直觉。 转到“工具” | “选项” | “常规”,将SSH客户端设置为PuTTY/Plink,并取消选中“Sourcetree打开时自动启动SSH agent”。


你能详细说明一下吗?我添加了密钥,安装了winssh-pageant,运行它,SourceTree不会要求密码,但会给出访问被拒绝的错误。 - Pedro77
@Pedro77 请问执行 '''ssh -T git@github.com''' 的输出是什么? - MSlimmer

2
我按以下步骤解决了这个问题:
  • 找到 Pageant 的路径(我的情况下在 C:\Users\{my-user}\AppData\Local\SourceTree\app-3.3.8\tools\putty\pageant.exe)
  • 按下 Windows 键 + R 或在 Windows 工具栏中输入“run”
  • 在文本框中输入“shell:startup”
  • 创建 pageant 的快捷方式并粘贴到刚打开的窗口中
  • 右键单击快捷方式,然后点击“属性”
  • 在快捷方式选项卡中,在目标框中输入 your-sourcetree-pageant-path\pageant.exe id_rsa.ppk
  • 在“开始”中输入C:\Users\{my-user}\.ssh 并单击“确定”

请注意,您的 id_rsa.ppk 必须存储在 C:\Users\{my-user}\.ssh 目录中

如果出于某种原因,您的 id_rsa.ppk 受到密码保护,并且您确定不会存在安全问题,则可以删除密码。

按照以下步骤删除 id_rsa.ppk 的密码:

  • 打开 PuttyGen
  • 转到“转换”=>“导入密钥”
  • 删除密码
  • 保存私钥和公钥
  • 用不受保护的 id_rsa.ppk 替换受保护的 id_rsa.ppk

希望这些可以帮到您!


1
你需要手动启动代理,并设置环境变量,以便命令能够找到它。
如果没有设置这些环境变量,每当你启动一个命令(如SourceTree),该命令就无法访问代理,因此会要求输入密码。
将代理程序在系统启动时自动启动应该可以解决这个问题。
如果ssh无法连接代理,它也会查看~/.ssh/,因此,如果你将密钥放在那里,它也应该能工作。(请参阅man ssh了解详细信息。)

1

在进行以下测试后,密码从未被要求。

为了测试您的SSH密钥是否已正确添加,请在终端中运行以下命令(将gitlab.com替换为您的GitLab实例域): ssh -T git@gitlab.com

第一次通过SSH连接到GitLab时,您应该验证您正在连接到的GitLab主机的真实性。例如,当连接到GitLab.com时,请回答yes以将GitLab.com添加到受信任主机列表中: The authenticity of host 'gitlab.com (35.231.145.151)' can't be established. ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw. Are you sure you want to continue connecting (yes/no)? yes

警告:已永久添加'gitlab.com'(ECDSA)到已知主机列表中。 注意:对于GitLab.com,请查阅SSH主机密钥指纹部分以确保您连接到正确的服务器。例如,您可以在链接的部分中看到上面显示的ECDSA密钥指纹。 一旦添加到已知主机列表中,您应该再次验证GitLab主机的真实性。再次运行上述命令,您应该只收到欢迎来到GitLab,@username!消息。 如果欢迎消息没有出现,您可以使用以下命令以详细模式运行ssh来解决问题: ssh -Tvvv git@gitlab.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接