使用IntelliJ IDEA的git:无法从远程仓库读取

279

最近几周,我无法从远程仓库拉取或推送代码。我以为这是升级到IntelliJ IDEA 14时发生的问题,但我也可以在IDEA 13.1.5中重现这个问题。

工具提示显示 “获取失败 致命错误:无法从远程仓库读取。”

版本控制选项卡中的异常信息如下:

14:02:37.737: cd C:\dev\project
14:02:37.737: git -c core.quotepath=false fetch origin --progress --prune
java.io.IOException: Padding in RSA public key!
    at com.trilead.ssh2.signature.RSASHA1Verify.decodeSSHRSAPublicKey(RSASHA1Verify.java:37)
    at com.trilead.ssh2.KnownHosts.addHostkey(KnownHosts.java:98)
    at com.trilead.ssh2.KnownHosts.initialize(KnownHosts.java:414)
    at com.trilead.ssh2.KnownHosts.initialize(KnownHosts.java:440)
    at com.trilead.ssh2.KnownHosts.addHostkeys(KnownHosts.java:137)
    at org.jetbrains.git4idea.ssh.SSHMain.configureKnownHosts(SSHMain.java:462)
    at org.jetbrains.git4idea.ssh.SSHMain.start(SSHMain.java:155)
    at org.jetbrains.git4idea.ssh.SSHMain.main(SSHMain.java:137)
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

使用IntelliJ的内置终端,执行git -c core.quotepath=false fetch origin --progress --prune,它正常运行。

根据堆栈跟踪,我的KnownHosts似乎存在问题,所以我从~/.ssh/known_hosts中删除了我们的git服务器,希望IntelliJ会再次插入它。但在通过UI更新时问题仍然出现,并且known_hosts中没有新条目被写入;考虑到文件的缓存,我重启了IntelliJ,但没有成功。

当在终端中执行另一个git fetch时,现在我被要求是否要永久添加服务器。之后,它又被写入到known_hosts中,但是IntelliJ仍然不允许我更新项目。

我在网上没有找到任何关于这种行为的信息,所以我猜它不是新版IntelliJ的已知错误。尽管如此,我仍然将其升级到14.0.2版本,但问题仍旧存在。

IntelliJ被配置为使用内置SSH可执行文件。

有人知道这里可能出现什么问题吗?


你是否手动将SSH密钥添加到了你的Git仓库中? - aurelius
@yole 我尝试了puttygenGit GUI,因为这也是我的第一个想法。您确定是关于我的密钥对吗?异常似乎与已知主机有关:https://code.google.com/p/connectbot/source/browse/src/com/trilead/ssh2/KnownHosts.java?spec=svn1e98217978aaccfcf62097266f699acf5b22493e&r=c1e41c03ad352b00e88a926db600937f2ab06e50#137 - stuXnet
除了其他答案之外:如果 .ssh 目录和密钥文件的权限太弱,git 将拒绝连接。 - user1800885
类似的问题,但是当前的解决方案都无法解决。我安装了2018 EAP版本,解决了一个于2017年12月报告的问题。终于可以工作了! - Ricardo
更新SSH密钥以使用新的口令。 - Ricardo
显示剩余3条评论
35个回答

738

设置 --> 版本控制 --> Git,然后在 SSH 可执行文件下拉菜单中选择 原生

版本控制: Git: SSH 可执行文件: 对于当前项目

如果这没有帮助,请确保您的原生 sshgit 客户端是足够新的版本。


5
我知道可以更改SSH实现,我甚至明确写了我正在使用内置可执行文件(但我没有写:本机在Windows上对我不起作用)。但是你的帖子并没有回答我的问题,即内置可执行文件可能存在什么问题。 - stuXnet
8
@Jimbo 我的猜测是这样理解的:内置使用存储库中的另一个“用户”,先前该“用户”被允许推送文件和更改。该“用户”在更新中被重置,不再能够进行操作。本机使用您在计算机上登录的帐户。 - AlexG
10
奇怪,我有三台不同的电脑都在工作两年以上后开始出现这种问题。这个方法解决了它。WTF. - Nicholas DiPiazza
11
这段内容的意思是,Github移除了一些加密标准,会影响到使用“内置”库的软件(例如TeamCity)。如果你的本地git客户端已经是最新版本,那么这个步骤可以解决问题。 - philsch
3
注意,自版本2019.1以来,“Git设置”中已删除了“SSH可执行文件选择器”。在此处阅读更多信息。 - informatik01
显示剩余15条评论

69

前往 首选项 > 版本控制 > Git。确保 SSH 可执行文件设置为 “Native”。(如果已经是这样,请将其切换到“内置”,应用它,然后再次切换回“Native”)。

如果这不能解决您的问题,建议下载一个 Git 客户端,例如 GitHub 客户端(免费桌面应用程序),并尝试通过该应用程序同步您的项目。 然后返回 IntelliJ 并检查它是否正常工作。


1
在Android Studio中也可以正常工作。这个问题让我很疯狂,谢谢@Farbod jan! - Javad
1
切换SSH可执行文件对我有用。 我已经在本机上了。 - nic
1
对于考虑回到内置的人:请先考虑更新您的本地SSH。本地可执行文件在整个操作系统中使用,并且在IDE内外表现一致。 - milosmns

57

最近在使用我的存储库时,我开始遇到无法从远程存储库读取错误。我的规格如下:

  • IntelliJ IDEA 2017.3.4(旗舰版)
  • 设置 -> 版本控制 -> Git -> SSH可执行文件 -> 内置
  • Fedora Linux

输入图像描述

当尝试从IDE进行推送/拉取/提取等操作时,这些问题仅会发生 - 从命令行执行相同命令可以正常工作。

适用于我的解决方案

我不想从 Built-In SSH可执行文件切换到Native,主要是因为我的本地SSH客户端每次尝试与远程存储库同步时都会要求我输入密码。

我通过将远程URL从SSH更改为HTTPS来解决此问题。根据GitHub帮助页面上的说明- 建议使用HTTPS URL而不是SSH URL

将远程URL从SSH更改为HTTPS

在IntelliJ IDEA中,进入 VCS -> Git -> Remotes...,选择包含“origin”的行并单击编辑按钮。如果您的存储库托管在GitHub上,请将SSH URL替换为:

git@github.com:USERNAME/REPOSITORY.git

收件人:

https://github.com/USERNAME/REPOSITORY.git

您还可以从GitHub仓库主页获取HTTPS URL-点击“克隆或下载”按钮,然后点击“使用HTTPS”链接显示您的仓库的HTTPS URL:

enter image description here

更新于2018-03-13

JetBrains刚刚发布了IntelliJ IDEA 2017.3.5版本,其中包括修复SSH访问GitHub的功能- https://blog.jetbrains.com/idea/2018/03/intellij-idea-2017-3-5-fix-for-ssh-access-to-github/


2
这是适用于我在MacBook Pro上使用的解决方案,PHPStorm 2017.3.4(2018年1月30日,在所需的1/31构建日期之前)。 - Edward Barnard
1
这种解决方案有效,通常问题在于许多用户尝试使用SSH密钥来定义远程,但会出现错误。大多数情况下切换从SSH到HTTPS是解决方案。 - Agent 0
1
使用基于https的链接解决我的PhpStorme版本2018.1.5问题。 - dmitri
1
我也试过了,可以用。 - Ahmed Owian
1
更改git的路径到更高版本2.17.1可以解决ssh问题,前提是之前已经生成了私钥和公钥。 - Smart Coder
显示剩余2条评论

24

IntelliJ内置的SSH客户端似乎会对known_hosts进行哈希处理,但我使用的那个文件中主机名是明文的。

当我删除了该文件并让IntelliJ创建一个新的,只包含我的(哈希后的)GitLab服务器而没有其他内容时,它就可以正常工作了。

同时,不可能混合使用 - 将一些未哈希的条目与已哈希的条目放在一起供IntelliJ使用。因此,您需要配置其他SSH客户端使用哈希主机


20

对我来说,解决方案是:设置 ˃ 版本控制 ˃ Git ˃ 使用凭据助手

图片描述


取消勾选它,对吧?还是勾选? - Gk Mohammad Emon
我记得应该是“checked”。 - Ahmed Ashour

15
  1. 进入设置->Git->在SSH可执行文件下拉菜单中选择Native。(如果未选中)
  2. 从Github仓库复制HTTPS链接。
  3. 进入VCS->Git->远程..
  4. 编辑原点并将HTTPS链接粘贴到URL字段中。
  5. Ctrl+Shift+k,将项目推送到仓库。 完成。

1
SSH和使用HTTPS协议替换URL之间有什么联系? - sweisgerber.dev
我只是想知道,这里到底有谁提到了GitHub? - Emad Ha
这对我有用,它要求我输入我的Bitbucket凭据,然后就可以了。 - Marlon

13

在 PyCharm 中,

file|
    v-->settings|
                v-->Version Control|
                                   v-->Git

SSH可执行文件内置 改为 本地

然后点击应用关闭


11

我通过重新添加远程仓库解决了这个问题:VCS -> Git -> Remotes。


5
在我的情况下这不是一个好选择...现在我无法重新添加它,收到了"Invalid remote [...] Remote URL test failed: Could not read from remote repository. "的信息。注意:我可以通过git cli连接到github。 - Ricardo
1
与@Ricardo相同的问题 - Uri Goren
我已经在问题中添加了注释,但它们被隐藏了。因此,我也添加了一个答案 - Ricardo
由于未知原因,它适用于PHPStorm 2017.4。谢谢! - Maksim B.
使用WebStorm 这也帮了我一些忙。 我已经配置了HTTP,然后将其删除并重新添加,它就可以工作了。 - eyalewin
显示剩余2条评论

5
你需要生成一个新的SSH密钥并将其添加到ssh-agent中。为此,你应该按照这个链接进行操作:链接
在你创建公钥并将其添加到github账户之后,你应该在Intellij Idea中的设置->版本控制->Git->SSH可执行文件下使用内置(而非本地)选项。

1
对我来说,切换到“Native”解决了这个问题,在Mac上。 - Jeroen Vermeulen - MageHost
我为这个问题苦苦挣扎了大约一周左右(幸运的是,在此期间我可以使用git命令行)。最终我解决了这个问题,方法是重新生成我的SSH密钥,但同时我还不得不重启电脑并使用命令行ssh-add。 - Crenguta S

5

@yabin ya提供的方案很棒,只是要提醒您:如果您仍然遇到相同的问题,请前往“设置-版本控制-GitHub”,取消选中“使用ssh克隆git存储库”。


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