git - 如何在 Windows 上将现有 key 添加到 openssh?

标签 git putty openssh

我一直在许多计算机上使用 putty/plink/pageant + tortoiseGIT,发现它很困难和痛苦,并且不适用于 eclipse。

所以我决定安装 tortoiseSVN 和 windowsGIT,选择 openssh 版本而不是 putty 版本。

我在 github 中安装了一个现有的 key ,并且我有生成的 ppk 文件,每次我想在 pagaent 中使用它时我都必须手动加载它。

但是现在我卡住了。我如何使用 openssh 执行此操作?什么是选美的 openSSH 等价物?

我怀疑我必须将 ppk 转换为 id_rsa.pub 或类似的文件,但我如何处理它们才能在本地机器上使用?

我是否必须像安装 putty 一样安装名为 openSSH 的东西?有选美之类的吗?

或者我应该放弃并重新使用 putty 进行 SSH(并且每次都必须手动加载 key )

编辑 1。 在 2 小时的谷歌搜索中没有找到任何东西。我会大胆猜测 openssh 不是我需要安装的东西,而是 git install 附带的东西。我猜是因为没有提到它,Windows 使用与 Unix 相同的方案,即放置 key ~/.ssh/... 所以我使用 puttygen 加载我的 ppk,然后“导出 openSSH key ”。然后我尝试将它保存为 ~/.ssh/mykey.rsa 和 mykey.dsa(不知道应该是哪个)。这没有用 - 乌龟 git 仍然说

"could not read from remote repository"

我猜的问题是没有办法知道 puttygen 是导出公钥还是私钥 - 它没有给你选项。

我也试过保存为 id_rsa 和 id_dsa,但没有成功。

最佳答案

一些背景

OpenSSH没有相当于选美。嗯,差不多。它有一个 ssh-agent.exe 程序 ( man page ) 和一个随附的 ssh-add.exe 程序 ( man page ) 来向代理添加 key 。

不幸的是(对于 Windows)ssh-agent 假设的工作流程是这样的:

  1. 您运行它,它会打印一些有关如何访问它的信息(通过 ssh-add),然后从终端分离并转到后台。

    它打印的信息以 Unix shell 代码的形式呈现,它设置了一些环境变量,所以大多数时候它应该像这样运行:

    eval `ssh-agent -s`
    

    虽然这听起来很复杂,但在任何合理的类 Unix 系统上,您的桌面环境将确保 SSH 代理在启动时及早生成,并且由它传递的环境变量将被使用,并由后来启动的所有程序继承用户。所以它会在您不注意的情况下发挥作用™。

  2. 您运行 ssh-add 以将 key 提供给正在运行的 ssh-agent 实例。

    此程序使用在第一步中设置的环境变量定位代理。

  3. 当 SSH 客户端要与服务器握手时,它会尝试使用与 ssh-add 相同的方法来定位代理。

如您所见,此模型不需要了解图形用户环境等,因此您不会获得任何花哨的托盘图标和某种 GUI 来将您的 key 提供给代理。

由于这显然不适合在 Windows 中创建用户 session 的方式,PuTTY 实现了自己的方法来提供 SSH 代理,它自己的方法来定位正在运行的代理和它自己的协议(protocol)来与之交谈。

你能做些什么

  1. 继续使用 PuTTY。

    我不使用 Eclipse 但我知道它使用 JGit使用存储库并与远程服务器通信。因此,如果您找到一种方法告诉 JGit 如何使用您自己的 SSH 客户端程序来设置 SSH 隧道(就像 Git for Windows 使用其 GIT_SSH 环境变量一样),您将能够将 Eclipse 与 PuTTY 结合使用。

  2. 放弃 SSH key 的安全性,无需 SSH 代理即可工作。

    为此,您可以使用 PuTTY 的 puttygen.exe 将 native PuTTY 格式的 SSH key 转换为适合 OpenSSH 的格式,无需提供加密密码——并且因此获得一个未加密的 key ——然后将该 key 提供给 OpenSSH:要么将它放在 %USERPROFILE%\.ssh 下并将其命名为 id_rsa(是的,id_rsa 没有任何扩展名)或创建一个 %USERPROFILE%\.ssh\config 配置文件并在其中指定您的 key 所在的位置。引用this manual page其格式。

关于git - 如何在 Windows 上将现有 key 添加到 openssh?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24740943/

相关文章:

linux - 希伯来语文件名为 ???.txt

java - 如何在 PuTTY 中保存并运行 Java 文件?

powershell - 如何在不输入 y 的情况下使用 ssh-keygen 和 PowerShell 覆盖现有的 SSH key 文件

linux - 从 bash 脚本添加 ssh 并自动输入密码

git - 获取错误消息 '' 致命 : sha1 information is lacking or useless"when apply a patch using "git am -3"

git - 将单个文件提交到另一个分支

git:如何在 merge 后重新设置分支并保留 merge 提交的更改

php - 如何在 OpenShift 上作曲更新?

linux - 始终必须在树莓派上键入 'sudo service ssh restart' 才能使用腻子通过笔记本电脑进行控制

bash - 从 bash 脚本中通过 ssh 在远程主机上执行命令