如何在Windows上将现有密钥添加到openssh?

时间:2014-07-14 16:10:34

标签: git putty openssh

我一直在很多电脑上使用putty / plink / pageant + tortoiseGIT,发现它既困难又痛苦,并且不适用于eclipse。

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

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

但现在我被卡住了。我怎么用openssh这样做?什么是openSSH相当于选美?

我怀疑我必须将ppk转换为id_rsa.pub或者simlar,但他们如何使用它们才能在本地机器上使用?

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

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

编辑1。 在谷歌搜索2h没有找到任何东西。我会猜测openssh不是我需要安装的东西,但是git install附带了一些东西。我会猜测,因为没有提到它,Windows使用与unix相同的方案,即把键〜/ .ssh / ... 所以我用puttygen加载我的ppk,然后“导出openSSH键”。然后我尝试将它保存为〜/ .ssh / mykey.rsa和mykey.dsa(不知道它应该是什么)。这不起作用 - 乌龟git仍然说

"could not read from remote repository"

我想问的是,没有办法知道puttygen是否正在导出公钥或私钥 - 它没有给你选项。

我也试过保存为id_rsa和id_dsa,没有运气。

2 个答案:

答案 0 :(得分:3)

一些背景

OpenSSH没有相当于选美。好吧,差不多。它有一个ssh-agent.exe计划(man page)和一个附带的ssh-add.exe计划(man page),可以为代理添加密钥。

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

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

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

    eval `ssh-agent -s`
    

    虽然这听起来很复杂,但在任何类似Unix的系统上,您的桌面环境都会确保SSH代理在启动时尽早生成,并且使用它传递的环境变量,并由以后启动的所有程序继承。用户。所以它只是工作™,你甚至没有注意到。

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

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

  3. 当客户端与服务器握手时,SSH客户端尝试使用与ssh-add相同的方法来查找该日期。
  4. 正如您所看到的,此模型不需要了解图形用户环境等,因此您无法获得任何精美的托盘图标和某种GUI来将密钥提供给代理。

    由于这显然无法在Windows中创建用户会话的方式,PuTTY实现了自己的方法来提供SSH代理,它自己的方法来定位正在运行的代理和它自己的协议与它交谈。

    你可以做些什么

    1. 继续使用PuTTY。

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

    2. 放弃SSH密钥的安全性,无需SSH代理即可正常工作。

      为此,您可以使用PuTTY的puttygen.exe将原始PuTTY格式的SSH密钥转换为适合OpenSSH 的密钥,而无需提供加密密码 - 从而获得未加密的密钥 - 然后将该密钥提供给OpenSSH:将其放在%USERPROFILE%\.ssh下并命名为id_rsa(是的,id_rsa没有任何扩展名)或创建一个%USERPROFILE%\.ssh\config配置文件,并指定密钥所在的位置。有关其格式,请参阅this manual page

答案 1 :(得分:2)

在阅读了大约50篇帖子并尝试了很多选项之后,我最终得到了它。

我在Windows上设置git时发现的所有文章都使用plink,或者生成一个新的证书(并且不提及如何在本地安装它)。使用现有的要求:

1)在puttygen中加载你的ppk

2)在Conversions菜单中选择"导出OpenSSH键"

3)将文件保存在〜/ .ssh / id_rsa中,例如C:\ Users \用户me.ssh \ id_rsa

问题:

1)如果你想添加第二把钥匙,我不知道你可以把它放在哪里。

2)每次执行git命令时,仍然需要输入密码。那里 似乎无法记住它。使用选美,您可以将密钥加载一次,然后记住它直到您关闭。我尝试创建一个_netrc文件,但这不起作用(我猜它只适用于你使用plink,而不是openssh)。

我无法理解为什么有人会选择使用openssh而不是plink。