我的Git设置在Linux上运行良好,但是当我尝试在Windows下进行设置(使用Windows的Git和TortoiseGit)时,我不知道将私钥SSH放在哪里(或者更好的是,如何知道ssh
它在哪里)位于)。在Windows版Git的安装过程中,我正在使用标准的ssh.exe选项。如果我允许服务器上的密码验证(代替RSA),则安装程序运行良好。
我的Git设置在Linux上运行良好,但是当我尝试在Windows下进行设置(使用Windows的Git和TortoiseGit)时,我不知道将私钥SSH放在哪里(或者更好的是,如何知道ssh
它在哪里)位于)。在Windows版Git的安装过程中,我正在使用标准的ssh.exe选项。如果我允许服务器上的密码验证(代替RSA),则安装程序运行良好。
Answers:
如果您正在运行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,你需要设置通过SSH密钥佩西的方向。您需要为使用TortoiseGit的每个存储库执行此操作。
~/.ssh/id_rsa
文件复制到Program Files\Git\.ssh\id_rsa
-有点混乱,但是现在IntelliJ和Windows cmd可以推送到使用密钥身份验证的git存储库。
id_rsa
和id_rsa.pub
成c:\program files (x86)\Git\.ssh
。该.ssh
目录已经存在。谢谢,JP。
id_rsa
没有扩展名。那是文件名,而不是目录
使用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教程;这基本上是您需要设置的管道。
setx HOME c:\Users\admin` command doesn't seems to be working in Git Bash. You have to use
取而代之的是cmd`。
GIT_SSH=c:\pathto\plink.exe
您可以通过以下方式为TortoiseGit指定关键位置:
屏幕截图如下:
以前的答案都没有对我有用。最终这就是对我有用的东西。如果您知道要键入什么,它实际上很简单。不需要腻子。
这是您自己的计算机上完成的工作。现在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,您没有外壳访问其服务器的权限,但是可以使用其网站上载密钥,因此对于“立即复制到您的服务器”这一点,请执行以下操作:
如果您将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
我只是设置%HOME%=%HOMEPATH%
这具有为登录到系统的所有用户工作的优势(他们每个人都有单独的.ssh文件夹)。
在Vista中:
%HOMEPATH%
不包含驱动器号,因此,如果源代码不在,则C:
需要C:
添加%HOME%
。
set %HOME%=%HOMEPATH%
为我工作!谢谢!!
您的私钥需要添加到工作站上的SSH代理中。如何实现此目标可能取决于您所使用的git客户端,但是puTTY及其关联的代理(寻呼机)可能会帮您解决问题,这是官方二进制文件和源代码的链接:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
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)
就我而言,我在Docker容器中使用Windows的Git windowsservercore
。
我的Git由Chocolatey安装到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
。
另外,如果你打算使用ssh-keyscan host.com > known_hosts
的OpenSSH,要小心,因为从输出管道stdout
的keyscan
(在Windows上)改变编码UCS-2,但OpenSSH的只能读取UTF-8!因此,请确保更改known_hosts
文件编码。
好的,我看着的建议.
。
但是,我认为将私有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 \
known_hosts
。果然在C:\Users\Dave\AppData\Local\VirtualStore\Program Files (x86)\Git\.ssh
。通过将我的密钥文件(id_rsa)放在该目录中,ssh可以毫无疑问地找到它。我做了一些阅读-这是Windows处理试图写入禁止区域(例如“ C:\ Program Files \”)的(旧版)软件的方式,因此Git的ssh完全不知道它正在写入Windows的VirtualStore目录正在透明地进行处理。至少这些文件属于用户!
最有效的方法是使用Pageant,因为它将使您在会话开始时只写一次密码,而不是每次推送都写密码。这里的所有答案都太短,因此我将在此处发布详细的指南:
pageant.exe
,puttygen.exe
,putty.exe
并plink.exe
从PuTTY的网站。将它们放在C:\puttyTools
目录中。puttygen.exe
。%USERPROFILE%\_ssh
(在我的计算机中,该目录映射到C:\Users\andres\.ssh\
)。所谓的密钥并不重要,但出于演示目的,我将其称为github.ppk
。该文件的扩展名应为.ppk。Public key for pasting into OpenSSH authorized_keys file
粘贴到GitHub设置中的新SSH密钥中。给它一个标题,描述密钥在哪台计算机上(例如“工作笔记本电脑”)。pageant.exe
,将出现一个新的系统托盘图标。Environ
通过WindowsMenu 查找应用程序,它将找到Edit environment variables for your account
):GIT_SSH = "C:\puttyTools\plink.exe"
和SVN_SSH = "C:\puttyTools\PuTTY\plink.exe"
MINGW64
Git控制台的新实例,并通过编写命令验证环境变量是否在那里env | grep -i ssh
。(最初从这两个指南中提取,我将它们合而为一:如何为Windows设置Git并配置MinGW-W64 + MSYS以使用PuTTY Plink / Pageant。)
当将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 = git@github.com:**username**/**reponame**.git
fetch = +refs/heads/*:refs/remotes/origin/*
git@{SERVER URL}
吗?
文件的标准位置在中%USERPROFILE%\.ssh
。
%USERPROFILE%
在Unix中等于$ HOME(通常映射为c:\users\youruserid
)。
如果您使用的是Git随附的SSH工具,它们是标准的命令行Unix风格的工具,则可以在此处使用类似我的脚本的工具在所有shell上使用ssh-agent。
%USERPROFILE% is the equivalent of $HOME
是不是相当于$HOME
。很多不良作用的Linux应用程序移植到Windows款待t时的两个相同的E但他们应该不会被同等对待。
%USERPROFILE%
在Windows上以与$HOME
在Linux上相同的方式使用的工具违反了针对Windows开发的有据可查的最佳实践/建议(MS早已发布并随时间更新)。有许多工具可以执行此操作,但是跟在它们后面的参数与参数“池中的X pees”非常相似,因此我们也应该这样做。 USERPROFILE
是用户存储他们创建/保存的文档的位置(例如,保存对话框)。 APPDATA
用于每个用户的配置数据。 LOCALAPPDATA
用于每个用户的缓存和大文件。 PROGRAMDATA
用于计算机范围的配置和缓存。
从Windows服务帐户运行ssh时,以下答案也适用于此问题:Jenkins(Windows服务),通过SSH进行Git
您可以这样指定密钥的路径和密钥文件的名称(在Ubuntu上)。例如:
ssh -i /home/joe/.ssh/eui_rsa
GIT_SSH_COMMAND
要在Windows机器上设置什么。
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)
如果您对Windows计算机具有必要的权限,并且您的策略允许这样做,那么我建议您安装Cygwin(https://cygwin.com/),尤其是考虑到您具有Linux的使用经验。Cygwin使您可以像在其他任何Linux / Unix计算机上一样处理ssh-key。它提供了对几乎所有Linux CLI工具的访问。
TortoiseGit允许您指定克隆存储库时要使用的密钥。只需检查“ Load Putty Key”并浏览到.ppk
文件,如屏幕截图所示:
Settings... -> Network -> SSH client
设置为C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
我已经通过创建解决了上述问题
〜/ .ssh / config
文件并放入:
IdentityFile C:\Users\adria\.ssh\mysshkey
在Windows 7系统上,Git Gui在userprofile/.ssh
文件夹中或更具体地寻找RSA密钥c:/users/yourusername/.ssh/
。
我设置的棘手部分是让hostmonster上的共享主机接受密钥。我可以使用它的唯一方法是使用Git Gui创建密钥对(不使用密码),然后通过控制面板ssh和管理密钥复制并粘贴公共密钥。
首先,您必须在Git Gui中创建菜单项,方法是进入帮助菜单,显示SSH密钥,然后选择生成密钥。现在,您将在.ssh
目录中拥有两个新密钥。打开.pub
文件并复制内容。
登录到共享主机上的控制面板,然后进入SSH,管理SSH密钥和导入密钥。粘贴到“ 公共”框中,并确保您使用不带扩展名的正确名称命名-mine was id_rsa
。现在,您必须使用管理授权链接对密钥进行授权,这样它将被串联到authorized_keys
文件中。
现在,您的Git Gui和Git Bash应该能够使用SSH进行推送,而无需键入密码。奇怪的是,我能够在自己的运行Linux的服务器上通过Git Bash和Git Gui来使用SSH进行推送,这只是让我感到满意的共享主机。我希望这能对某人有所帮助,因为我花了数小时的反复试验来提出这个问题-而且非常简单!
我的msysgit OpenSSL / Bash Git经验(不是PuTTY的plink)是.ssh/
文件夹的搜索顺序如下。
%HOME%/.ssh/
%HOMEDRIVE%%HOMEPATH%/.ssh/
%USERPROFILE%/.ssh/
因此,为什么这么多的人建议设置HOME
其他人之一不是您所期望的。更重要的是,您可以自己检查;调试ssh -v
对使用公钥身份验证的服务器的使用,如下所示:
$ ssh -v git@github.com
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%/.ssh
是C:/Users/Username/.ssh
和局部具有密钥。设置%HOME%
为%USERPROFILE%
停止它查看远程主驱动器。
我根据需要在Windows上使用TortoiseGit以及Git Bash。我已经将所有内容添加到TortoiseGit中,并且工作正常,但是即使密钥在正确的目录中,Git Bash也没有选择它。事实证明,我必须从Git Bash进行此操作:
ssh-add C:\\Users\\<YOUR_USER>\\.ssh\\id_rsa
当然,您可以将路径更改为密钥所在的位置,记住要\\
用作分隔符。