TortoiseGit要求输入密码

94

我刚开始使用Git。我使用Windows 7并安装了msysgit(1.7.8)和Tortoisegit(1.7.6)。 该存储库创建在Linux服务器上,通过局域网可访问。 我遇到的问题是无法使用Tortoisegit克隆存储库,它要求输入密码,但我不确定它要求的是什么密码。 同时,我可以使用Git Gui克隆存储库并执行所有操作。 请问有谁能帮助我理解为什么Tortoisegit会询问密码而Git Gui则不会呢? 我尝试卸载Git和Tortoisegit,然后重新安装,但没有成功。

Tortoisegit错误


你的 Git 服务器使用公钥身份验证吗? - Felix Yan
在相同的代码库克隆中,TortoiseGit 和 Git GUI 分别在做什么? - manojlds
2
当你在Tortoise Git上右键单击时,点击设置。在Git中,有一个链接->远程,点击它。从远程列表中点击origin。在右边,你会看到URL。在URL中,用用户名替换掉你的用户名并加上密码:username:<你的密码>。最后,当你从Tortoise Git进行git操作时,你会发现它从不询问你密码。 - kamaci
1
你是使用了http URI而不是SSH吗?那就是我的问题。 - CAD bloke
对于我们中的“特殊人士”(包括我在内),请记得在将命令粘贴到Tortoise Git Clone窗口的URL窗口之前,从命令的前面删除“git clone”部分-否则您会遇到类似的问题。 - icc97
请参考以下链接:https://dev59.com/SmYr5IYBdhLWcg3wB1-h - Murali Murugesan
17个回答

153

我的同事解决了这个问题。步骤如下:

  1. 右键点击 -> TortoiseGit -> 设置 -> 网络
  2. SSH客户端指向 C:\Program Files\TortoiseGit\bin\TortoisePlink.exe
  3. 将路径更改为 C:\Program Files (x86)\Git\bin\ssh.exe

或者:

  • C:\Users\...\AppData\Local\Programs\Git\usr\bin\ssh.exe
  • C:\Program Files\Git\usr\bin\ssh.exe - 对于Git 2.37.3

在我的Windows 8机器上,将SSH客户端指向msysGit ssh.exe文件时,当密码查询根本没有显示出来时,它起作用了。虽然是不同的问题,但对于那些在TortoiseGit中遇到SSH问题的人来说,这个解决方案绝对值得一试。 - Icermann
它没有修复,我得到了下面粘贴的错误,有什么建议吗?--> ssh:连接到主机github.com端口22:坏文件号 致命错误:无法从远程存储库读取。 - Mustafa Güven
1
对我来说,这并没有帮助(至少在连接到GitHub时,我没有尝试其他存储库)。 - Suma
4
谢谢,完美地运行了。尽管我的ssh.exe位于我的用户目录下C:\ Users \ ... \ AppData \ Local \ Programs \ Git \ usr \ bin - ppasler
7
正如@ppasler所提到的,ssh.exe现在位于C:\Program Files (x86)\Git\usr\bin\ssh.exe或他所提到的位置,具体取决于安装方式。 - Vlad Schnakovszki
显示剩余5条评论

47
如果您需要使用用户名/密码,有一种比当前第二种答案更简单的解决方案:
右键单击 -> Tortoise Git -> 设置 -> Git -> 凭据 -> 选择“Wincred,所有Windows用户” -> 点击应用
下次输入存储库的密码时,该密码将自动保存。
如果您正在使用需要SSH密钥而不是用户名/密码的存储库(这似乎是OP的原始问题),则需要:
1.在PuTTY gen中打开SSH密钥(与Tortoise Git一起安装)
2.在PuTTY gen中,将密钥保存为PuTTY密钥。
3.在存储库中,右键单击-> Tortoise Git->设置->Git->Remotes。 找到远程(通常是'origin'),然后从第2步加载PuTTY密钥。

在我的情况下,只有在使用用户名时才有效。当您输入用户的电子邮件地址时,它不起作用,请记住这一点。 - Razze
3
这是最简短明了的回答,谢谢。 - Alphas Supremum
一直在寻找这个确切的答案! - NielW

23

为了在没有密钥的情况下完成它...

右键单击您的文件夹
选择tortoiseGit->settings->Git->Remote
选择origin(或者您已经标记过的主要远程)

在URL下使用此格式。

Https://用户名:密码@URL

其中: 用户名是您的用户名
:冒号分隔用户名和密码,必须存在
密码是您的密码
@将凭据与您的url分开
URL是连接到.git资源所使用的url

感谢Kamaci的贡献。


3
这个解决方案也适用于密钥。克隆Https://用户名@网址,就可以了。 - Orace
2
是的,除了不要这样做,因为当你进行合并时,TortoiseGit往往会将整个URL放入提交消息中! - mwardm
这是完美的解决方案。但是否有任何方法可以隐藏密码,因为它是明文。 - Amit Kumar
2
如果密码包含@符号怎么办? - Hammad Dar
我使用了这个答案,因为我有mingw64,并且我得到了这个日志: 跳过命令行'"C:\ Program Files \ Git \ mingw64 \ bin \ .. \ usr \ bin \ bash.exe"' (未找到'C:\ Program Files \ Git \ mingw64 \ bin \ .. \ usr \ bin \ bash.exe') 需要有效的命令行;相应地编辑字符串资源 (3x) 错误:无法执行提示脚本(退出代码1) - C4F

15

使用TortoiseGit保存用户名和密码

在TortoiseGit中保存登录凭据非常容易。这样可以避免每次进行拉取或推送时都要输入用户名和密码。

  1. 创建名为_netrc的文件,内容如下:

    machine github.com
    login yourlogin
    password yourpassword

  2. 将该文件复制到C:\ Users \(或其他位置;这仅是我放置它的地方)

  3. 进入命令提示符,键入setx home C:\Users\

注意:如果您使用的是早于Windows 7的操作系统,则setx命令可能无法正常工作。请改用set命令,并通过“我的电脑”下的高级设置将home环境变量添加到Windows中。

来源: http://www.munsplace.com/blog/2012/07/27/saving-username-and-password-with-tortoisegit/


1
它的运作很好,但有没有一种方法可以加密明文密码?我在以明文方式存储我的Github密码时感到不舒服。 - Dio Phung
1
如果你害怕本地管理员,他们可以轻易地安装键盘记录器。本地管理员可以随心所欲地处理你的数据,因此,任何针对他们的安全措施都是安全性通过混淆(即使银行使用的工具和技巧也无法保护你免受知识渊博、决心坚定的本地管理员攻击,而他们确实会尽力而为)。关于哈希,你是什么意思?哈希是不可逆的。如果你使用密码本身进行加密,你仍然需要每次输入密码...所以这与一开始就不加密是一样的。 - Camilo Martin
1
@CamiloMartin加密不需要密码;有很多比密码更方便的认证系统。安全性并非全有或全无。 - adam
@DioPhung:“有没有一种方法可以加密明文密码?” 是的 - adam
1
虽然这个解决方案是可行的,但更好的做法是将密码存储在Windows PasswordVault中。自2013年3月以来,通过实现API git-credential-store,TortoiseGit已经具备了这种能力。这也可能更容易:从仓库内→上下文单击→TortoiseGit→设置→Git→凭据→wincred→确定,然后你就完成了。我为那些感兴趣的人写了一个完整的答案 - adam
显示剩余3条评论

8

我遇到了同样的问题。 我的环境是Windows 10,使用TortoiseGit 2.3.0.0以及git版本2.11.0.windows.1

以下方法解决了我的问题:

  • 右键单击->TortoiseGit->设置->网络
  • 更新SSH客户端为C:\Program Files\Git\usr\bin\ssh.exe

enter image description here


5

要自动化身份验证,请使用以下方法之一:

  1. 如其他人已经指出的那样,使用SSH密钥,或者
  2. 使用内置凭据助手。

显然,除非存储库不重要,否则不要将密码存储在文本文件中。

TortoiseGit >1.8.1 安装了助手 git-credential-winstore,该助手提供了访问和存储您的登录信息的本地API,存储在现有的本地Windows凭据存储中。

您可以通过转到 控制面板 → 用户帐户 → 凭据管理器 并选择“Windows凭据”来查看存储的凭据。以“git:”开头的条目来自 git-credential-winstore。

您可以通过以下方式为每个存储库设置wincred:

(GUI)

  1. 在文件资源管理器中导航至存储库。
  2. 右键单击 → TortoiseGit → 设置 → Git → 凭据
  3. 凭据助手:wincred - 仅限此存储库
  4. 下次与存储库进行身份验证时,凭据将被存储。

(CLI, POSH)

  1. cmdkey /add:git:https://USERNAME@github.com /user:USERNAME /pass:PASSWORD
  2.  

    @"
    [credential]
            helper = wincred
    "@ | Out-File -FilePath $repoRoot\.git\config -Append
    
你可以使用 cmdkey /list:git:* 列出存储在仓库中的所有凭据。
一旦存储,密码将不会被 cmdkey 显示 (http://ss64.com/nt/cmdkey.html)。
要列出所有包含密码的凭据,您需要使用 Windows API。对于 PowerShell,有 CredMan
. .\CredMan.ps1
.\CredMan.ps1 -ShoCred

5

一种实现此目的的方法是:

  • 使用PuttyGen生成密钥对(或将其导入为.ppk,如果您已经有了密钥)
  • 加载私钥到peagent
  • 将公钥导入到gitosis服务器中(向管理员提供您的公钥)
  • 然后使用plink作为SSH客户端

plink能够与peagent原生协作,以检索已加载的密钥。

您可以在标准putty分发版中找到plink.exe和peagent等其他工具。

要使用它,请转到:

TortoiseGit设置 -> 网络 -> SSH客户端。

默认情况下,其中包含TortoisePlink.exe的路径,而不是该路径,请提供plink.exe的路径。

或者,您可以在msys(git)发行版中使用ssh(.exe),但这样做无法使用.ppk格式/Peagent组合中的私钥。您需要通过PuttyGen将您的密钥导出到OpenSSH格式中,或者改用ssh-keygen创建密钥对。


“SSH客户端而不是TortoisePlink指向plink”是什么意思?这个SSH程序可能在哪里? - Mikaël Mayer
抱歉错过了标点符号,我认为这是混淆的源头。我已经更新了答案。 - mzzzzb
不需要更改任何设置。只需在通过SSH克隆存储库时提供私有Putty密钥,就可以完成操作。请记得在克隆窗口中输入SSH终端点而不是https终端点。 - MoonStom

3

我是如何解决这个问题的(Windows):

  1. 打开PuttyGen,导入我的SSH密钥并将其转换为Putty密钥,在“.ssh”文件夹中保存公钥和私钥。
  2. 打开PuTTY,进入“Connection->SSH->Auth”选项卡,然后在那里设置您的私钥文件。
  3. 返回到Session,选择默认设置并保存。
  4. 现在尝试再次克隆,您将被要求输入SSH密钥的密码,请输入密码即可。

3

URL和窗口标题TortoisePlink都表明海龟正在尝试使用ssh作为传输协议。git支持多种传输协议,包括文件系统访问和ssh访问。在您的问题中,您描述了您想通过文件系统访问访问远程repo。在这种情况下,您的远程URL应该类似于file://server/path/to/repo。请再次检查您的远程repo URL。


2
Pramodtech的答案在官方Windows Git客户端的当前版本中无法使用。 现在它将ssh可执行文件存储在Git \ usr \ bin 而不是Git \ bin (自2015年8月发布的2.5版以来)。
因此,请前往TortoiseGit >设置>网络并更改SSH客户端路径为: C:\ Program Files \ Git \ usr \ bin \ ssh.exe (或者根据您的Git安装路径) enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接