wake-up-neo.com

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

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

503
binaryorganic

对于Git Bash

如果您正在运行msysgit(我假设您正在运行)并且希望运行Git Bash(我建议通过TortoiseGit进行此操作,但我现在比GUI更倾向于使用CLI),则需要弄清楚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时,您需要通过 pacey的指示 设置SSH密钥。您需要为使用TortoiseGit的每个存储库执行此操作。

493
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运行,以便不闪烁窗口。

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

108
Oct

您可以通过以下方式为TortoiseGit指定关键位置:

  • 打开资源管理器窗口。
  • 打开上下文菜单并导航TortoiseGit设置
  • 在现在打开的窗口中,导航至GitRemote
  • 在相应的输入框中,将路径设置为您的PuTTY键。

屏幕截图如下:

Enter image description here

57
pacey

以前的答案都没有对我有用。最终这就是对我有用的东西。如果您知道要键入什么,它实际上很简单。不需要腻子。

  • 打开Git Bash提示
  • 输入“ ssh-keygen”
    • 接受默认位置
    • 选择一个空白的密码短语(因此只需按“输入”进入所有问题)
  • 现在将公共密钥复制到您的服务器,例如:scp〜/ .ssh/id_rsa.pub [email protected]:〜

这是您自己的计算机上完成的工作。现在ssh进入目标服务器,然后执行

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

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

ssh [email protected] ls

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

对于GitHub,您没有Shell访问其服务器的权限,但是可以使用其网站上载密钥,因此对于“立即复制到您的服务器”这一点,请执行以下操作:

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

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

这是Bitbucket的Git配置示例,该配置将使用正确的用户名以及默认密钥以外的其他密钥(以防您为SSH连接维护一个密钥,为Git帐户维护另一个密钥)。

〜/ .ssh/config

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
42
GregB

我只是设置%HOME%=%HOMEPATH%

这具有为登录到系统的所有用户工作的优势(每个用户都有单独的.ssh文件夹)。

在Vista中:

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

就我而言,我在Docker容器windowsservercore中使用Windows的Git。

我的Git由 巧克力 安装到C:\Program Files\Git

我必须使用以下命令更新文件C:\Program Files\Git\etc\ssh\ssh_config

Host example.com
   Identityfile ~/.ssh/id_rsa

然后我可以使用C:\Users\<user>\.ssh\id_rsa中的密钥

如果将Windows的Git与Windows的OpenSSH一起使用。 Git仍在使用自己的ssh

另外,如果您打算从OpenSSH使用ssh-keyscan Host.com > known_hosts,请小心,因为来自stdoutkeyscan的管道输出(在Windows上)会将编码更改为UCS-2,但是OpenSSH只能读取UTF- 8!因此,请确保更改known_hosts文件的编码。

9
oglop

您的私钥需要添加到工作站上的SSH代理中。如何实现此目标可能取决于您所使用的git客户端,但是PuTTY及其关联的代理(寻呼机)可能会帮您解决问题,这是官方二进制文件和源代码的链接:

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

7
Declan Shanaghy

文件的标准位置在%USERPROFILE%\.ssh

%USERPROFILE%相当于Unix中的$ HOME(通常映射为c:\users\youruserid)。

如果您使用的是Git附带的SSH工具,它们是标准的命令行Unix风格的工具,则可以使用 这里的我的脚本 之类的东西在所有shell上使用ssh-agent。

4
Eric Blade

最有效的方法是使用Pageant,因为它将使您在会话开始时只写一次密码,而不是每次Push都写密码。这里的所有答案都太短了,因此我将在此处发布详细的指南:

  1. 从PuTTY网站下载pageant.exeputtygen.exePuTTY.exeplink.exe。将它们放在C:\puttyTools目录中。
  2. 运行puttygen.exe
  3. 点击按钮 Generate
  4. 按照程序要求,在窗口顶部左右滚动鼠标,直到进度条已满。
  5. 提供密码,并在随后的文本框中重复该密码。
  6. 点击“保存私钥”。将这些文件保存到的通常目录是%USERPROFILE%\_ssh(在我的计算机中,这映射到C:\Users\andres\.ssh\)。所谓的密钥并不重要,但出于演示目的,我将其称为github.ppk。该文件的扩展名应为.ppk。
  7. 将文本复制到PuTTYgen顶部的文本框中,将其标记为Public key for pasting into OpenSSH authorized_keys file,然后将其粘贴到GitHub设置中的新SSH密钥中。给它一个标题,描述钥匙在什么机器上(例如“工作笔记本电脑”)。
  8. 运行pageant.exe,将出现一个新的系统托盘图标。
  9. 右键单击图标->添加密钥。
  10. 找到您的ppk文件,输入密码。
  11. 创建这些新的用户环境变量(通过WindowsMenu通过查找应用程序Environ来找到Edit environment variables for your account):GIT_SSH = "C:\puttyTools\plink.exe"SVN_SSH = "C:\puttyTools\PuTTY\plink.exe"
  12. 打开PuTTY.exe并尝试连接到托管Git存储库的主机。例如,尝试通过SSH连接到github.com,然后对话框将询问您是否接受服务器的指纹:单击“是”。
  13. 运行MINGW64 Git控制台的新实例,并通过写入命令env | grep -i ssh来验证环境变量是否在那里。
  14. 你应该准备好了。尝试从您的主机使用Git + SSH协议进行克隆。

(最初从这两个指南中提取,我将它们合而为一:如何为Windows设置Git配置MinGW-W64 + MSYS使用PuTTY Plink/Pageant。)

4
knocte

好吧,我看了.

但是,我认为将私有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 \

3
Bas van den Dikkenberg

在将GitHub for Windows和Git GUI for Windows混合使用时,您可能会遇到Git GUI不断提示您输入用户名和密码的问题。解决方法是将远程URL从https:(这是Windows的GitHub创建的)更改为Git协议。在配置文件的.git目录中,找到:

[remote "Origin"]
   url = https://github.com/**username**/**reponame**.git
   fetch = +refs/heads/*:refs/remotes/Origin/*

更改为:

[remote "Origin"]
    url = [email protected]:**username**/**reponame**.git
    fetch = +refs/heads/*:refs/remotes/Origin/*
3
IDisposable

我有类似的问题,这里没有答案可以解决问题。原来,我的密钥对最初是用空密码生成的。 (我知道,傻瓜。)

创建新的密钥对并将公钥上传到GitHub后,一切又开始正常工作。

2
Eric Cloninger

我已经通过创建解决了上述问题

〜/ .ssh/config

文件并放入:

IdentityFile C:\Users\adria\.ssh\mysshkey
2
Adrian Onu

Pageant(随 PuTTY捆绑包 提供的SSH代理)为我解决了这个问题。

我在“开始”菜单的“启动”文件夹(_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)

1
Owen Blacker

从Windows服务帐户运行ssh时,以下答案也适用于此问题: 带有SSH的Git的詹金斯(Windows服务)

1
Alexander Pacha

您可以这样指定密钥的路径和密钥文件的名称(在Ubuntu上)。例如:

ssh -i /home/joe/.ssh/eui_rsa
1
jim

很多答案都这样说,但是对我来说还不够快!

在Windows中使用msys(标准Windows控制台)C:\Users\{you}\.ssh\id_rsa

基本上,它不会打扰扫描已安装的密钥(至少不在我的新笔记本电脑上),因此特别需要id_rsa

我遇到了此问题,想在Ruby Windows 10 64位的MSYS CLI)中克隆一些私有工作仓库

1
MrMesees

如果使用Windows的Git,则在生成SSH密钥后,必须将SSH密钥添加到ssh-agent。

请参阅生成新的SSH密钥并将其添加到ssh-agent

eval $(ssh-agent -s)

// Tell where the keys are located

ssh-add ~/.ssh/id_rsa
0
Matoeil

阅读对Declan答案的评论,尝试首先打开命令提示符(开始→运行cmd),然后导航到该git/bin文件夹并运行ssh-keygen。从理论上讲,这将生成一个RSA密钥并将其放置在适当的目录中。然后,您只需要找到它并与世界分享您的公钥即可。

窗口“闪烁”的原因是Windows运行该程序,并且在执行该程序时,它会在真正需要输出时以提示您已完成的方式关闭命令提示符。

0
naydichev

如果您使用的是Windows 7/8,则应在C:\ Users\Your_User_Name.ssh中查找,只需将id_rsa文件复制并粘贴到此处,即可立即使用。

0
eeree

在Windows上使用SSH时,我犯了一个错误,就是当我尝试通过Git Bash客户端使用密钥时,〜/ .ssh中的所有文件都具有错误的权限,但是并未尝试告诉我这是一个错误。问题。

作为测试,请确保已将〜/ .ssh目录中的所有内容都设置为chmod 600。

0
Spedge

您还可以加载PuTTY代理(寻呼机),并添加使用PuTTY为服务器生成的私钥。

Git识别出这一点并将其用于推/拉。

0
deepakkt

如果您对Windows计算机具有必要的权限,并且您的策略允许,我建议您安装Cygwin( https://cygwin.com/ ),尤其是考虑到您已经拥有Linux经验。 Cygwin将使您可以像在其他任何Linux/Unix计算机上一样处理ssh-key。它提供了对几乎所有Linux CLI工具的访问。

0
torbenl

根据需要,我在Windows上使用了TortoiseGit以及Git Bash。我已经将所有内容添加到TortoiseGit中,并且工作正常,但是即使密钥在正确的目录中,Git Bash也没有选择它。事实证明,我必须从Git Bash进行此操作:

ssh-add C:\\Users\\<YOUR_USER>\\.ssh\\id_rsa

您当然可以将路径更改为密钥所在的位置,记住要使用\\作为分隔符。

0
Vlad Schnakovszki

在我的Windows 7系统上,Git Gui在userprofile/.ssh文件夹或更具体地说c:/users/yourusername/.ssh/中寻找RSA密钥。

我设置的棘手部分是让hostmonster上的共享Host接受密钥。我唯一可以使用它的方法是使用Git Gui创建密钥对(没有密码),然后通过控制面板ssh和管理密钥复制并粘贴公共密钥。

首先,您必须通过以下菜单在Git Gui中创建密钥:帮助显示SSH密钥,然后生成密钥。现在,您将在.ssh目录中拥有两个新密钥。打开.pub文件并复制内容。

登录到共享主机上的控制面板,然后进入[〜#〜] ssh [〜#〜]管理SSH密钥导入密钥。粘贴到公共框中,并确保将其命名为正确的名称而没有扩展名-我的名字是id_rsa。现在,您必须使用管理授权链接对密钥进行授权,这样它将被串联到authorized_keys文件中。

现在,您的Git Gui和Git Bash应该能够使用SSH进行推送,而无需键入密码。奇怪的是,我能够在自己的运行Linux的服务器上通过Git Bash和Git Gui使用SSH进行推送,这只是让我感到满意的共享主机。我希望这能对某人有所帮助,因为我花了数小时的反复试验来提出这个问题-而且非常简单!

0
user228414

我的msysgit OpenSSL/Bash Git经验(不是PuTTY的plink)是您的.ssh/文件夹如下。

  1. %HOME%/.ssh/
  2. %HOMEDRIVE%%HOMEPATH%/.ssh/
  3. %USERPROFILE%/.ssh/

因此,为什么这么多人建议您设置HOME(如果其中之一不是您所期望的)。更重要的是,您可以自己检查;调试使用ssh -v到使用公钥身份验证的服务器,如下所示:

$ ssh -v [email protected]
OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
debug1: Reading configuration data /d/.ssh/config
...
debug1: identity file /d/.ssh/identity type -1
debug1: identity file /d/.ssh/id_rsa type 1
debug1: identity file /d/.ssh/id_dsa type -1
...
debug1: Next authentication method: publickey
debug1: Trying private key: /d/.ssh/identity
debug1: Offering public key: /d/.ssh/id_rsa
..
Hi kcd83! You've successfully authenticated, but GitHub does not provide Shell access.

我们发现ssh在一个模糊的驱动器上搜索,以前的答案似乎都不能解释我们看到的内容。

有时%HOMEDRIVE%%HOMEPATH%是映射的网络驱动器(例如H:/)会在出现网络/文件服务器问题时导致不必要的故障,即使%USERPROFILE%/.sshC:/Users/Username/.ssh并具有本地密钥。设置 %HOME%%USERPROFILE%将其停在远程本地驱动器上。

0
KCD

在Windows上使用Git Gui v0.17,我单击以下菜单命令:Help显示SSH密钥

出现一个对话框,标题为您的OpenSSH公钥。我生成了一个密钥,并将其复制到剪贴板。然后我继续遵循 githelp 上的setup-ssh说明,从第三步开始。之后,Git Gui与GitHub进行了静默通信-无需输入任何凭据。

0
snow6oy

使用Windows 10时,运行时我无法使Pageant生成的SSH密钥起作用(至少对于命令行中的Git,使用SourceTree我没有问题):

git Push Origin master

所以我的解决方案:

  1. 我打开了“ Git Bash”
  2. ssh-keygen
    
  3. 确认密钥现在存在

    ls ~/.ssh
    
  4. 在记事本++中打开id_rsa.pub,选择所有内容

  5. 在Bitbucket中添加了一个新密钥 https://bitbucket.org/account/user/myusername/ssh-keys/

  6. 将标签内容粘贴到键字段->添加键

之后,命令行Git开始工作。看来它想要旧的PEM格式,因为如果我尝试将此密钥导入到选美中,它的含义就很大。

0
HostMyBus

TortoiseGit允许您指定克隆存储库时要使用的密钥。只需检查“加载PuTTY密钥”并浏览到.ppk文件,如屏幕截图所示: https://i.stack.imgur.com/lAyzT.png

0
NGNeer

如果您在Windows上使用Git命令行,则可以执行以下操作:

打开cmd.exe并执行setx HOME c:\PATH_TO_PRIVATE_KEY

新建一个文件夹, .ssh,(如果不存在)在c:\PATH_TO_PRIVATE_KEY并复制您的id_rsa文件(您的私钥)放入其中。

做完了现在,您可以正常使用Git命令行了。

0
duccom