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

bin*_*nic 524 windows ssh rsa git private-key

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

Dan*_*ain 510

对于 Git Bash

如果您正在运行 msysgit(我假设您正在运行)并且希望运行 Git Bash(我推荐它而不是 TortoiseGit,但我现在更倾向于使用 CLI 而不是 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 的每个存储库执行此操作。

  • 使用 GitBash 我发现我必须将我的 `~/.ssh/id_rsa` 文件复制到 `Program Files\Git\.ssh\id_rsa` - 这有点令人困惑,但现在 IntelliJ 和 Windows cmd 可以推送到使用的 git 存储库密钥认证。 (45认同)
  • 同样地。我刚刚安装了 git-for-windows,我从 cmd.exe 运行它。我需要将文件 `id_rsa` 和 `id_rsa.pub` 放入 `c:\program files (x86)\Git\.ssh` 。`.ssh` 目录已经存在。谢谢,JP。 (10认同)
  • 第二段是金色的。:) (5认同)
  • 在您拥有存储库之前,pacey 对 tortoisegit 的说明将不起作用(因为除非您对存储库采取行动,否则不会出现“远程”配置设置),并且如果可以,您可能无法首先获得存储库' t 验证自己以便从源进行克隆。棘手! (4认同)
  • @Damon:它应该是没有扩展名的 `id_rsa`。那是文件名,不是目录 (4认同)
  • 如果我想添加 [多个密钥](http://stackoverflow.com/questions/2419566/best-way-to-use-multiple-ssh-private-keys-on-one-client) 名称与` id_rsa`? (4认同)
  • 使用 `ssh -v git@github.com` 来查看你的 ssh 尝试使用哪些文件 (3认同)
  • @DanMcClain“_你需要通过启动 Git Bash 然后输入 `pwd`_ 来找出你的主目录是什么”——根据 [Wiki](http://en.wikipedia.org/wiki/Pwd),` pwd` 代表_打印工作目录_,几乎总是显示_当前_(**工作**)目录,而不是**主目录(参见 Wiki 中的示例,多次发出`pwd`每次都会看到_不同的_目录)。据我所知, **home** 目录是_constant_并且不会不时更改。为了确定 Git Bash 中的 **home** 目录,我总是通过执行 `cd ~` 来访问它。 (2认同)
  • Windows 10最懒的方法:在路径栏中输入“%USERPROFILE%”(来自https://git-scm.com/book/en/v1/Getting-Started-First-Time-Git-Setup) (2认同)

Oct*_*Oct 113

使用 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教程;这基本上与您需要设置的管道相同。

  • 这是我一直在寻找的,因为我试图使用 Windows 命令提示符,而不是 git bash。 (16认同)
  • +1 `GIT_SSH=c:\pathto\plink.exe` (3认同)
  • `setx HOME c:\Users\admin\` 命令似乎在 Git Bash 中不起作用。你必须改用`cmd`。 (2认同)

pac*_*cey 59

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

  • 打开资源管理器窗口。
  • 打开上下文菜单并导航TortoiseGit ?设置
  • 在现在打开的窗口中,导航到Git ?偏僻的
  • 在相应的输入框中设置 PuTTY 密钥的路径。

屏幕截图如下:

在此处输入图片说明

  • 此外,如果您需要将您的私钥从其他格式转换为 '.ppk' 格式,您可以按照 [THIS](http://develop-for-fun.blogspot.com/2013/12/configure-tortoise-git.html ) (9认同)
  • Git > Remote 仅在您成功克隆存储库后才会出现。 (6认同)
  • 一个更简单的解决方案是在 git 中设置一切正常工作(使用 openSSH),然后告诉 TortoiseGit 使用 git 使用的 ssh.exe。见http://stackoverflow.com/a/33328628/318317 这样,你只需要修复一次。 (5认同)

Hug*_*ins 53

以前的答案都不适合我。这就是最终对我有用的方法。如果您知道要输入什么,它实际上相当简单。它不需要腻子。

  • 打开 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
Run Code Online (Sandbox Code Playgroud)

就是这样!你完成了!在 Git Bash 中,执行以下操作进行测试:

ssh someuser@someserver.com ls
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Gre*_*egB 49

如果您将 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
Run Code Online (Sandbox Code Playgroud)

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

eval `ssh-agent`
ssh-add /C/keys/yourkey.key
Run Code Online (Sandbox Code Playgroud)

  • 我这样做了,但对于 github.com:主机 github.com IdentityFile ~/.ssh/github_rsa (2认同)

小智 17

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

这有利于所有登录系统的用户(他们每个人都有单独的 .ssh 文件夹)。

在 Vista 中:

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

  • 就我而言,我添加了 HOME = %USERPROFILE% (6认同)

小智 11

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

我的 Git 是由Chocolatey安装到C:\Program Files\Git.

我不得不C:\Program Files\Git\etc\ssh\ssh_config用这个更新文件:

Host example.com
   Identityfile ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

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

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

另外,如果您计划ssh-keyscan host.com > known_hosts从 OpenSSH使用,请小心,因为来自stdoutof keyscan(在 Windows 上)的管道输出将编码更改为 UCS-2,但 OpenSSH 只能读取 UTF-8!所以一定要更改known_hosts文件编码。


小智 7

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

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

  • Pageant 确实为我解决了这个问题——我在开始菜单的启动文件夹中有一个快捷方式(`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) (8认同)

小智 5

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

[remote "origin"]
   url = https://github.com/**username**/**reponame**.git
   fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)

将其更改为:

[remote "origin"]
    url = git@github.com:**username**/**reponame**.git
    fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)


小智 5

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

%USERPROFILE%相当于 Unix 中的 $HOME(通常映射到类似的东西c:\users\youruserid)。

如果您使用 Git 随附的 SSH 工具(标准命令行 Unix 风格工具),您可以使用我这里的脚本之类的东西在所有 shell 中使用 ssh-agent。


kno*_*cte 5

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

  1. 下载pageant.exeputtygen.exeputty.exeplink.exe从PuTTY的网站。将它们放在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. 创建这些新的用户环境变量(通过Environ通过 WindowsMenu查找应用程序,它将找到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,会出现一个对话框询问您是否接受服务器的指纹:单击 YES。
  13. 运行MINGW64Git 控制台的新实例,并通过编写命令来验证环境变量是否存在env | grep -i ssh
  14. 你应该准备好了。尝试从您的主机使用 Git + SSH 协议进行克隆。

(最初摘自这两个指南,我将它们合二为一:How to setup Git for Windows and Configure MinGW-W64+MSYS to use PuTTY Plink/Pageant。)