【问题标题】:Using git with ssh-agent on Windows在 Windows 上使用 git 和 ssh-agent
【发布时间】:2016-04-10 20:36:04
【问题描述】:

我在 Windows 上。我安装了 git 和 posh-git(Windows PowerShell 的一些助手)。我可以使用ssh-add 添加密钥,并且可以使用 github 和我的网络服务器进行身份验证。我还可以使用 PowerShell 中的 git 与我的存储库进行交互。

但有一件事我不能做:我使用 git-plus 作为 Atom 编辑器。而且我没有让它推送到我的回购。我的问题是什么?

【问题讨论】:

标签: git powershell ssh atom-editor ssh-agent


【解决方案1】:

posh-git 和git for windows 2.7 应该包含设置ssh-agent 所需的一切。安装模块后,您可以使用以下方式启动代理:

Import-Module ~\Documents\WindowsPowerShell\Modules\posh-git\posh-git
Set-Alias ssh-agent "$env:ProgramFiles\git\usr\bin\ssh-agent.exe"
Set-Alias ssh-add "$env:ProgramFiles\git\usr\bin\ssh-add.exe"
Start-SshAgent -Quiet

然后您应该会看到 SSH_AUTH_SOCK 环境变量已设置:

C:\Code\Go\src\bosun.org\cmd\scollector [master]> gci env:SSH_AUTH_SOCK

Name                           Value
----                           -----
SSH_AUTH_SOCK                  /tmp/ssh-6ORcVQvRBZ2e/agent.11668

运行命令时应该能够使用 git-plus atom 包。我可以使用 Ctrl+Shift+H 在 atom 中调出 git 菜单,选择推送,然后推送到远程仓库(如果失败,它不会显示错误,但我推送的新分支就在那里) .

在打开 atom 之前需要启动 ssh-agent,以便设置 SSH_AUTH_SOCK 环境变量。如果它仍然不起作用,您可能需要在 PowerShell 中测试 ssh 以验证它是否可以在没有密码的情况下连接:

Set-Alias ssh "$env:ProgramFiles\git\usr\bin\ssh.exe"
ssh hostname

【讨论】:

  • 是的,已设置 SSH_AUTH_SOCK 变量。此外,在 Atom 和 git-plus 中使用不受保护的密钥进行连接。代理正在运行,身份已导入。我可以与 ssh 建立连接,但 git-plus 无法使用受保护的密钥。
  • 受保护的密钥是什么意思?
  • 受密码保护的密钥。例如,我按照 GitHub 文档创建了一个密钥:help.github.com/articles/generating-ssh-keys 创建密钥 (id_rsa),使用密码保护它并将其添加到 ssh 代理。然后我将它添加到 GitHub 和我的网络服务器。现在我可以使用 PowerShell,cd 进入我的本地项目并推/拉,而无需输入密钥的密码。即使使用 ssh 连接到我的网络服务器也可以。但是,git-plus 不起作用。只有当我从我的密钥中删除密码(使用ssh-keygen -p)时,git-plus 才能完成它的工作。那么为什么 git-plus 不使用 ssh-agent 呢?
  • 尝试了一个多小时后,这是唯一有效的方法。haacked.com/archive/2011/12/19/get-git-for-windows.aspx
  • 将别名命令添加到 My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 就可以了。
【解决方案2】:

您可以在 powershell 中使用 Git for Windows 附带的命令运行 ssh-agent:

 start-ssh-agent.cmd

这将启动 ssh-agent。

然后你可以添加你的密钥

 ssh-add ~/.ssh/namneOfPrivateKey

在这里找到:https://docs.microsoft.com/en-us/azure/devops/repos/git/use-ssh-keys-to-authenticate?view=azure-devops

【讨论】:

  • 运行 start-ssh-agent.cmd 将打开一个 CMD shell。您可能需要留在这个 shell 中才能运行ssh-add。 start-ssh-agent.cmd 设置变量SSH_AUTH_SOCK,这是ssh-add 所需要的,但是这个变量不能在这个CMD shell 之外访问。因此,ssh-add 需要在这个 CMD shell 中运行。与此答案中的示例等效的 CMD 将是 ssh-add "%USERPROFILE%\.ssh\namneOfPrivateKey"。
  • 另外,您可能需要使用C:\Program Files\Git\usr\bin\ssh-add,而不是ssh-add。 ssh-add 解析为 C:\Windows\System32\OpenSSH\ssh-add,但 git 在 C:\Program Files\Git\usr\bin\ssh-add 提供了另一个版本。 start-ssh-agent.cmd 有一个错误,它无法识别 ssh-agent 在 PATH 中,因此它使用 git 版本。由于它使用了 git 的 ssh-agent,所以你也需要使用 git 的 ssh-add。因此,您需要指定 git 版本的完整路径。这会将示例命令更改为 "C:\Program Files\Git\usr\bin\ssh-add" "%USERPROFILE%\.ssh\namneOfPrivateKey"。
【解决方案3】:

几年来,ssh 部分已经从posh-git 中分离出来,现在可以通过posh-sshell 获得。

安装:

PowerShellGet\Install-Module posh-sshell -Scope CurrentUser
PowerShellGet\Install-Module posh-git -Scope CurrentUser

在您的 ps1 文件中:

Import-Module posh-git
Import-Module posh-sshell
Start-SshAgent

它应该会自动拾取您 ~/.ssh 中的所有密钥文件。

【讨论】:

  • 这现在应该是任何 posh-git / ssh 问题的公认答案。希望我能多次投票。
【解决方案4】:

问题是 git 无法找到提供凭据的 ssh_agent.exe 我遵循的步骤如下所示

  1. 搜索ssh_agent.exe文件驱动
  2. 将路径作为环境路径添加到 profile.example.ps1 文件中

$env:path += ";" + "C:\Program Files\Git\usr\bin"

【讨论】:

    【解决方案5】:

    如果您将Windows' native implementation of OpenSSH 与native ssh-agent Windows service 一起使用,请确保在安装时已将适用于Windows 的git 配置为使用该SSH 实现:

    如果您使用捆绑的 OpenSSH 安装,git 将默认使用该安装,并且不会使用导入 Windows 的本机 ssh-agent 服务的任何密钥。您需要在出现提示时选择“使用外部 OpenSSH”。

    如果您在安装时没有做出此选择,您应该可以通过再次运行安装程序来解决该问题。

    【讨论】:

      猜你喜欢
      • 2012-09-10
      • 1970-01-01
      • 2021-02-24
      • 2018-03-18
      • 2019-07-06
      • 2021-06-23
      • 2015-01-18
      • 1970-01-01
      • 2011-01-30
      相关资源
      最近更新 更多