题 如何告诉Git for Windows在哪里可以找到我的私有RSA密钥?


我的Git设置在Linux上运行良好,但是当我尝试在Windows下进行设置时(使用Git for Windows和 TortoiseGit),我不知道在哪里放置我的私人SSH密钥(或者,更好的是,如何判断 ssh 它位于哪里)。我在安装Git for Windows时使用标准的ssh.exe选项。如果我在服务器上允许密码验证(代替RSA),则设置运行正常。


461
2017-10-25 16:45




我有同样的问题,我可以使用公共密钥作为“根”使用“Git Bash”程序ssh进入我的开发框,该程序与“Git For Windows”一起安装但我无法以“git”登录即使我已将“authorized_keys”文件从我的“root”复制到我的“git”用户并正确设置所有者和权限。当“root”与完全相同的“authorized_keys”文件一起使用时,为什么我不能以“git”身份登录。相反,对于“git”,它会传递所有私钥,这些私钥与使用“root”完全相同,并要求输入密码。顺便说一句,这是Centos 5.5服务器。 - Jarrod Roberson
@fuzzy lollipop:你对git用户的authorized_keys文件有权限吗?它应该是chmod 600,并且应该由git用户拥有。如果它由root用户拥有,它将无法工作 - Dan McClain
是的所有文件和目录都是正确的所有者和权限 - Jarrod Roberson


答案:


对于Git Bash

如果你正在运行msysgit(我假设你是)并且正在寻找运行Git Bash(我推荐它使用TortoiseGit,但我现在比GUI更倾向于使用GUI),你需要弄清楚你的主目录是什么用于Git Bash通过启动然后键入 pwd (在Windows 7上,它会是这样的 C:\Users\phsr 我认为)。当你在Git Bash时,你应该 mkdir .ssh

拥有主目录后,和 .ssh 在此文件夹下,您要打开PuTTYgen并打开先前创建的密钥(.ppk文件)。一旦您的密钥打开,您想要选择 Conversions -> Export OpenSSH key 并保存到 HOME\.ssh\id_rsa。在该位置获得密钥后,Git Bash将识别密钥并使用它。

注意:注释表明这并不适用于所有情况。您可能需要将OpenSSH密钥复制到 Program Files\Git\.ssh\id_rsa (要么 Program Files (x86)\Git\.ssh\id_rsa)。

对于TortoiseGit

使用TortoiseGit时,需要通过设置SSH密钥 节奏的方向。您需要为使用TortoiseGit的每个存储库执行此操作。


459
2017-11-05 17:18



在你拥有存储库之前,步调的tortoisegit指令将不起作用(因为除非你对repo采取行动,否则“远程”配置设置不会出现),如果可以,你可能无法获得存储库t验证自己,以便从原点克隆。整蛊! - Kylotan
有了GitBash,我发现我必须复制我的 ~/.ssh/id_rsa 归档到 Program Files\Git\.ssh\id_rsa  - 这有点令人困惑,但现在IntelliJ和Windows cmd可以推送到使用密钥身份验证的git存储库。 - JP.
同样。我刚刚安装了git-for-windows,我从cmd.exe运行它。我需要把文件 id_rsa 和 id_rsa.pub 成 c:\program files (x86)\Git\.ssh 。该 .ssh 迪尔已经在场了。谢谢,JP。 - Cheeso
第二段是金色的。 :) - Bjørn
@Damon:应该是 id_rsa 没有扩展名。那是文件名,它不是目录 - Dan McClain


使用Git for Windows附带的内置SSH客户端,您需要设置HOME环境变量,以便Git SSH客户端可以找到密钥。

例如,在 Windows Vista 安装,这将通过发布来完成 setx HOME c:\Users\admin\ 在命令行上。

它使我的日子和Git解决了问题,前提是你的私钥没有密码保护。如果你想使用ssh-agent,你可以像往常一样运行ssh-agent cmd.exe(虽然我从来没有这样做过)和ssh-add。

请注意,所有Git / SSH工具都应该从cmd.exe运行,以免出现  一个窗口。

如果这不能正常工作,可以通过调整来实现使用plink GIT_SSH。参考所有SVN + ssh教程;这基本上与您需要设置的管道相同。


101
2017-11-05 18:24



这是我正在寻找的,因为我正在尝试使用Windows命令提示符,而不是git bash。 - John Ruiz
很好,很容易修复,但如果没有这个就很难搞清楚! - thaddeusmt
重要的是在HOME =和c:\之间没有空白...... Oct的解决方案对我有用。 :-) - Lutz
该 setx HOME c:\Users\admin` command doesn't seems to be working in Git Bash. You have to use cmd`而不是。 - trejder
+1 GIT_SSH=c:\pathto\plink.exe - Nick Grealy


您可以通过以下方式指定TortoiseGit的密钥位置:

  • 打开资源管理器窗口。
  • 打开Contextmenu并导航 TortoiseGit → 设置
  • 在现在打开的窗口中,导航到 混帐 → 远程
  • 在相应的输入框中设置PuTTY键的路径。

屏幕截图如下:

Enter image description here


48
2017-11-05 14:07



此外,如果您需要将私钥转换为其他格式的“.ppk”格式,您可以遵循 这个 - Tariq M Nasim
它对我有用。 - Maxim Eliseev
只有在您成功克隆存储库后才会出现Git> Remote。 - Steve Pitchers
一个更简单的解决方案是在git中设置一切正常工作(使用openSSH),然后告诉TortoiseGit使用git使用的ssh.exe。看到 stackoverflow.com/a/33328628/318317 这样,你只需要修复一次。 - Daniel Rose


之前的答案都不适合我。这最终对我有用。如果你知道输入什么,它实际上相当简单。它不需要PuTTY。

  • 打开Git Bash提示符
  • 输入'ssh-keygen'
    • 接受默认位置
    • 选择一个空白密码 (所以只需按“输入”所有问题')
  • 现在将公钥复制到您的服务器,例如: scp~ / .ssh / id_rsa.pub someuser@someserver.com:~

这就是你自己的电脑上的一点点。现在 ssh 进入目的服务器,然后做

mkdir -p ~/.ssh
cd ~/.ssh
cat ../id_rsa.pub >> authorized_keys
rm ../id_rsa.pub

而已!你完成了!从Git Bash,执行以下测试:

ssh someuser@someserver.com ls

如果它列出了Git服务器上主目录中的文件,那么你就完成了!

对于GitHub,您没有shell访问其服务器,但您可以使用他们的网站上传密钥,因此对于“现在复制到您的服务器”,请执行以下操作:

  • 在Git Bash中,输入'cat~ / .ssh / id_rsa.pub',选择结果,然后将其复制到剪贴板。
  • 在GitHub网站上,转到“帐户设置”,“SSH和GPG密钥”,单击“新建SSH密钥”,然后粘贴密钥。

45
2018-04-25 01:32



不要没有密码短语就不要创建密钥。这就像把密码放在一个文本文件中,除了每个人都知道私钥的默认位置。 - GregB
你在回答错误的问题。 Q是如何指向现有私钥的。 - Orangutech
@GregB,我这样看:我创建无密码密钥的任何服务器都和我的笔记本电脑一样安全,它是我笔记本电脑安全边界的扩展。实际上,甚至没有,因为我的主目录是加密的;-)所以,它与我的笔记本电脑上的加密家庭分区一样安全,在我看来,这对于保护对github的访问是“足够好的”。 (当然,这可能与您的意见不同!) - Hugh Perkins
@GregB不要陷入偏执狂! :]当然,使用受密码保护的密钥比使用无密码密钥更安全,但声称无密码密钥与在文本文件中存储密码一样容易破解是一个明显的错误。我见过许多指南,鼓励用户使用密码保护的密钥,但我从未见过任何声称,使用它们没有密码根本不安全。另外:有些系统不支持记住用户输入的密钥密码的解决方案,并且每次使用密钥时都会提出要求。这使得在这种情况下使用SSH密钥毫无意义。 - trejder
为了与原始问题有所偏离的对话,SSH密钥肯定比密码更加加密,但是通过不加密SSH密钥会使安全性受到威胁。我个人的方法是在一天开始时使用SSH代理解锁我的密钥,SSH代理然后将解密的密钥保存在内存中,这样我就不需要在一天中重新输入密码。正如@Hugh Perkins评论,我在解读,你们都比我/我们更了解你的安全要求:)。 - GregB


如果您将msysgit与OpenSSH工具一起使用,则需要创建 ~/.ssh/id_rsa,或者在中创建一个Git配置 ~/.ssh/config 这指向你的钥匙。

下面是Bitbucket的Git配置示例,该配置将使用正确的用户名和除默认密钥之外的密钥(如果您为SSH连接维护一个密钥,而为Git帐户维护另一个密钥)。

的〜/ .ssh /配置

Host bitbucket.org
    Hostname bitbucket.org
    User git
    IdentityFile /C/keys/yourkey.key

进入Git Bash后,您可以运行两个命令将密钥添加到当前会话的ssh-agent中,以避免重复键入密钥的密码。

eval `ssh-agent`
ssh-add /C/keys/yourkey.key

34
2018-04-11 06:34



我这样做但是对于github.com:主机github.com IdentityFile~ / .ssh / github_rsa - Sarah Vessels
如果路径中有空格,则必须使用引号:IdentityFile“/ C / My Keys / key” - r03
我更喜欢这种方式,因为这允许我快速连接来自其他PC的现有密钥 - Kirill Gusyatin
我的.gitconfig有部分。我应该在哪些部分放置这些主机? - Steve Yakovenko


我刚设置%HOME%=%HOMEPATH%

这样做的好处是可以为登录系统的所有用户工作(他们每个人都可以获得单独的.ssh文件夹)。

在Vista中:

  1. 右键单击“计算机”
  2. 选择属性
  3. 单击“高级系统设置”
  4. 单击Environment Variables
  5. 在底部(系统变量)单击“新建”
  6. 对于变量名称类型:HOME
  7. 对于可变路径类型:%HOMEPATH%
  8. 单击确定

14
2017-10-12 01:26



在我的情况下,我添加了HOME =%USERPROFILE% - igor
注意 %HOMEPATH% 不包含驱动器号,因此如果您的源未打开 C: 你需要前置 C: 至 %HOME%。 - Graeme Perrow


您的私钥需要添加到工作站上的SSH代理中。 你如何实现这一点可能取决于你正在使用什么git客户端,但是puTTY及其相关代理(选美)可能会为你做到这一点,这里是官方二进制文件和源代码的链接:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html上


7
2017-10-25 17:38



我在上面说过我正在使用Git for Windows并使用ssh.exe(打包w / git)代替putty。添加私钥必须有一些标准做法,我似乎无法找出如何。虽然切换软件确实允许我登录,但必须有一种方法来使用标准的Git设置,不是吗? - binaryorganic
对不起,我不在Windows上工作,只有Linux。但密钥必须在您的SSH代理中。是否有agent.exe或其他东西? - Declan Shanaghy
是的,设置是linux端的蛋糕。但不幸的是,我必须让它在Windows上工作。 Windows框中的git / bin文件夹中有几个与ssh相关的可执行文件(ssh,ssh-add,ssh-agent,ssh-keygen和ssh-keyscan),但我不知道如何制作它们中的任何一个做任何事情。他们只是打开一个cmd窗口,然后立即关闭。我很难过。 - binaryorganic
Pageant确实为我解决了问题 - 我的开始菜单的Startup文件夹中有一个快捷方式(C:\Users\owen.blacker\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup) 指向 "C:\Program Files (x86)\PuTTY\pageant.exe" "C:\Users\owen.blacker\Documents\SSH\OwenBlackerPersonal.ppk" "C:\Users\owen.blacker\Documents\SSH\OwenBlackerWork.ppk",以便它在启动时加载我的SSH密钥,这使得GIT“正常工作”:o) - Owen Blacker
@OwenBlacker OMFG!您 绝对应该 将此评论写为全尺寸 回答!这是 这里唯一的解决方案,这实际上帮了我,解决了我的问题!可惜,我只能给你+1! :] - trejder


好的,我看了一下这个建议 .

但是在公共文件夹中放入我的私有SSH密钥我认为不是一个好主意,所以我开始寻找knownhost所在的位置。

因此,如果要正确保护SSH密钥,则需要将密钥放在以下目录中:

对于Windows 7,8和8.1 32位:

C:\ Users \\ AppData \ Local \ VirtualStore \ Program Files \ Git \

对于Windows 7,8和8.1 64位:

C:\ Users \\ AppData \ Local \ VirtualStore \ Program Files(x86)\ Git \


4
2017-09-08 10:04



嗨Bas。我想你应该删除你的问题并询问或给它 超级用户 因为这是这类问题/答案的错误网站:-) - Ian Macintosh
这不仅仅是消化我的问题 - Bas van den Dikkenberg
这是我的Win7机器上最简单的解决方案。像你一样,我搜索了 known_hosts。果然,它在 C:\Users\Dave\AppData\Local\VirtualStore\Program Files (x86)\Git\.ssh。通过将我的密钥文件(id_rsa)放在该目录中,ssh能够无怨无悔地找到它。我做了一点阅读 - 这是Windows处理(遗留)软件试图写入禁止区域(如“C:\ Program Files \”)的方式,因此Git的ssh完全不知道它正在写入VirtualStore目录,Windows是透明地处理。至少这些文件属于用户! - DaveGauer