git 如何在Windows上向openssh添加现有键?

t40tm48m  于 2023-04-10  发布在  Git
关注(0)|答案(2)|浏览(160)

我一直在许多计算机上使用putty/plink/pageant + tortoiseGIT,发现它很难和痛苦,不能与eclipse一起工作。
所以我决定安装tortoiseSVN和windowsGIT,选择openssh版本而不是putty版本。
我在github中安装了一个现有的密钥,并且我有生成的ppk文件,每次我想在pageant中使用它时,我都必须手动加载它。
但是现在我被卡住了。我如何使用openssh来做到这一点?openssh等价于pageant是什么?
我怀疑我必须将ppk转换为id_rsa. pub或simlar,但是我如何处理它们才能使它们在本地机器上可用呢?
我必须像安装putty一样安装一个叫做openSSH的东西吗?它有类似pageant的东西吗?
或者我应该放弃并回到使用putty进行SSH(并且每次都必须手动加载密钥)
编辑1.在2个小时的谷歌搜索中没有找到任何东西。我将大胆猜测openssh不是我需要安装的东西,而是git install附带的东西。我将猜测,因为没有提到它,windows使用与Unix相同的方案,即将密钥~/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ssh/. ss
所以我使用puttygen加载我的ppk,然后“导出openSSH密钥”。然后我尝试将其保存为~/. ssh/mykey.rsa和mykey.dsa(不知道应该是哪个)。这不起作用-乌龟git仍然说

"could not read from remote repository"

我想问题是没有办法知道puttygen是导出公钥还是私钥--它没有给你这个选项。
我也试过保存为id_rsa和id_dsa,没有运气。

jtoj6r0c

jtoj6r0c1#

部分背景

OpenSSH没有pageant的等价物。好吧,差不多。它有一个ssh-agent.exe程序(man page)和一个附带的ssh-add.exe程序(man page)来向代理添加密钥。
不幸的是(对于Windows)ssh-agent假设的工作流程是这样的:
1.你运行它,它会打印一些关于如何到达它的信息(通过ssh-add),然后从终端分离并进入后台。
它打印的信息是以 *Unix shell代码 * 的形式呈现的,它设置了一些环境变量,所以大多数时候它应该像这样运行:

eval `ssh-agent -s`

虽然这听起来很复杂,但在任何明智的类Unix系统上,您的桌面环境将确保SSH代理在启动时尽早产生,并且由用户稍后启动的所有程序使用和继承它传递的环境变量。所以它只是工作™,甚至没有注意到。
1.运行ssh-add将密钥提供给正在运行的ssh-agent示例。
该程序使用在步骤1中设置的环境变量来定位代理。
1.当SSH客户机要与服务器握手时,它尝试使用与ssh-add相同的方法来定位agend。
正如你所看到的,这个模型不需要了解图形用户环境等,所以你不会得到任何花哨的托盘图标和某种GUI来将你的密钥提供给代理。
由于这显然不适合Windows中创建用户会话的方式,PuTTY实现了自己的方法来提供SSH代理,自己的方法来定位正在运行的代理,以及自己的协议来与之对话。

你能做些什么

1.继续使用PuTTY。
我不使用Eclipse,但我知道它使用JGit来处理仓库并与远程服务器通信。因此,如果你能找到一种方法来告诉JGit如何使用自己的SSH客户端程序来设置SSH隧道(就像Git for Windows使用其GIT_SSH环境变量一样),你就可以将Eclipse与PuTTY一起使用。
1.放弃SSH密钥的安全性,无需SSH代理即可工作。
为此,您可以使用PuTTY的puttygen.exe将本地PuTTY格式的SSH密钥转换为适合OpenSSH * 的格式,而无需 * 提供加密密码-从而获得未加密的密钥-然后将该密钥提供给OpenSSH:可以将它放在%USERPROFILE%\.ssh下并命名为id_rsa(是的,id_rsa没有任何扩展名),或者创建一个%USERPROFILE%\.ssh\config配置文件并指定密钥的位置。

o7jaxewo

o7jaxewo2#

在阅读了大约50篇帖子并尝试了很多选项之后,我最终让它工作起来了。
我找到的所有关于在windows上设置git的文章要么使用plink,要么生成一个新的cert(不要提到如何在本地安装它)。使用现有的cert需要:
1)加载你的ppk在puttygen
2)在“转换”菜单中选择“导出OpenSSH密钥”
3)将文件保存在~/.ssh/id_rsa中,例如c:\Users\me.ssh\id_rsa
问题:
1)如果你想添加第二个密钥,我不知道你可以把它放在哪里。
2)它仍然要求你每次执行git命令时输入一个密码。似乎没有办法记住它。使用pageant,你可以加载一次密钥,然后它会记住它,直到你关闭。我尝试创建一个_netrc文件,但这不起作用(我猜只有当你使用plink,而不是openssh时才有效)。
我不明白为什么有人会选择使用openssh而不是plink。

相关问题