我一直在很多电脑上使用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,没有运气。
答案 0 :(得分:3)
OpenSSH没有相当于选美。好吧,差不多。它有一个ssh-agent.exe
计划(man page)和一个附带的ssh-add.exe
计划(man page),可以为代理添加密钥。
不幸(对于Windows)的事情是ssh-agent
假定的工作流程是这样的:
您运行它,它会打印一些有关如何到达的信息(通过ssh-add
),然后从终端分离并转到后台。
它打印的信息以 Unix shell code 的形式呈现,它设置了一些环境变量,因此大多数时候它应该像这样运行:
eval `ssh-agent -s`
虽然这听起来很复杂,但在任何类似Unix的系统上,您的桌面环境都会确保SSH代理在启动时尽早生成,并且使用它传递的环境变量,并由以后启动的所有程序继承。用户。所以它只是工作™,你甚至没有注意到。
您运行ssh-add
将密钥提供给正在运行的ssh-agent
实例。
该程序使用在第一步中设置的环境变量来定位代理。
ssh-add
相同的方法来查找该日期。正如您所看到的,此模型不需要了解图形用户环境等,因此您无法获得任何精美的托盘图标和某种GUI来将密钥提供给代理。
由于这显然无法在Windows中创建用户会话的方式,PuTTY实现了自己的方法来提供SSH代理,它自己的方法来定位正在运行的代理和它自己的协议与它交谈。
继续使用PuTTY。
我不使用Eclipse,但我知道它使用JGit来处理存储库并与远程服务器通信。因此,如果您能找到一种方法告诉JGit如何使用您自己的SSH客户端程序来设置SSH隧道(就像Git for Windows一样,使用其GIT_SSH
环境变量)您将能够将Eclipse与PuTTY一起使用。
放弃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。