ssh会话中的ssh没有使用正确的ssh私钥

时间:2014-01-24 04:57:59

标签: git github ssh putty

在对other问题进行疑难解答时,我猜测由于某种原因未使用默认私钥。

在服务器上, C:\ Users \ Administrator.ssh \ config 包含:

Host bitbucket.org
 IdentityFile ~/.ssh/id_rsa.ppk

我正在使用plink在登录时管理ssh密钥。当我实际上在以管理员身份登录的计算机上时,运行git命令工作得很好。另一个例子:plink -T git@bitbucket.org工作正常。

但是,当通过PuTTY登录服务器时,运行git命令失败,plink -T git@bitbucket.org也是如此。但是,当我使用plink:plink -T -i C:\Users\Administrator\id_rsa.ppk git@bitbucket.org指定私钥时,它可以正常工作。

%userprofile%在我登录PuTTY时是正确的,我的笔记本电脑的用户名和密码完全相同。是什么原因导致ssh无法获取并使用配置中指定的ppk文件?在本地登录和通过PuTTY登录时,我的GIT_SSH会话变量也设置为plink.exe。令人沮丧的是,在发出git命令时我无法指定ppk文件。

更新:如下面的评论回复中所述,主要问题似乎是没有使用pageant.exe将密钥发送到我正在尝试连接的服务器。当登录本地分页时启动就好了但不是通过PuTTY登录时。我也读过PuTTY中的“用户代理转发”,但这似乎没有帮助。也许freeSSHd不支持它?如果它确实会有所作为呢?

更新2:Yeeeeaaaahhh ......越来越近了。我在登录VNC查看器时输入了“选美”,并说'选美已经在运行'。所以我说了什么,并把它输入PuTTY控制台......什么都没发生。所以我认为它没有运行,现在是。于是我接着执行了plink -T -v git@bitbucket.org并且执行了lo-and-behold选美,但是说它安装了0个SSH密钥。所以这是核心问题。 pageant是一个基于用户会话的应用程序,它认为SSH用户管理员与本地管理员不同,因此它不提供任何密钥。我还关闭了PuTTY连接并注意到额外的选美进程仍在运行。坏消息#1。坏消息#2是我可以从PuTTY中开始的选美进程数量没有限制。怎么办?

最终:问题解决了;见最后编辑的答案。

3 个答案:

答案 0 :(得分:1)

确保您确实定义了HOME环境变量,始终引用C:\Users\Administrator(或%USERPROFILE%),尤其是当您通过PuTTY登录时。

这将允许ssh找到你的ssh配置文件。

同时确保在生成ssh密钥时使用相同的ssh实现以及在使用git时使用ssh:请参阅“Git with SSH on Windows”。
如果您的私钥受密码保护,请参阅“Why git can't remember my passphrase under Windows”。

答案 1 :(得分:1)

这是我的“解决方案”:

1)从私钥文件中删除密码。选美不允许输入密码作为命令行参数,所以我不能在putty上使用它。很糟糕,但我还能做些什么?

2)在freeSSHd应用程序中,在命令外壳框中键入C:\WINDOWS\system32\cmd.exe /K "pageant C:\Users\Administrator\.ssh\id_rsa.ppk"以使ssh用户执行选美,以便分页者在请求密钥时识别。这导致另一个pageant exe进程在后台运行,当你关闭ssh连接时它不会关闭但是我只能在一夜之间完成。如果我能以某种方式获得它产生的进程的PID,然后以某种方式运行一个关闭它的脚本,那就太好了。

3)它现在有效。

附录:freeSSHd服务不能在本地用户帐户下运行,它必须是SYSTEM帐户;否则它只是立即关闭成功的连接。为什么?不知道。我认为这是最大的障碍......也许ssh用户基本上是在系统帐户下运行,因此无法访问在“管理员”下运行的已经运行的选美流程。

更好的答案更新:我摆脱了freeSSHd并用openssh安装了Cygwin。对所有sshd配置选项选择“是”,不要在线收听对某些选项说“不”的其他教程。不要在SYSTEM帐户下运行sshd。让它创建一个新的用户帐户并使用该帐户。最大的好处是,现在当我通过PuTTY运行'pageant'时,我做了多少次并不重要,因为它不会产生超过两个进程!一个用于已经运行的实际本地管理员帐户,另一个用于古怪的“SSH管理员”帐户(简称为管理员)。即使从不同的计算机登录,它也不会产生任何更多的进程。问题解决了。

答案 2 :(得分:0)

如果在所需的任何位置找不到密钥,您还可以添加参数-v-i,如:

plink -v -ssh -2 -i /whatever/location/id_rsa -l git gitserver.acme.com

首先,-v(详细)将有助于查明问题。然后你可以继续使用-i参数来确保它找到密钥并且它是有效的。

然后你开始使用%userprofile%

我还认为你的目录应该是c:\ Users \ Administrator.ssh - 你可能在忘记添加反斜杠的时候输错了。