使用GIT时,我在通过SSH使用GIT时遇到了问题,由于它在工作时以及在其他调制解调器上都可以正常工作,显然是我的家用调制解调器正在工作。我通过HTTP连接没有问题。

因此,我假设这是SSH问题,但是我不擅长直接使用它。我可以运行任何设置“测试”连接的命令,并让我确切地知道发生问题的时间和地点吗? ,fetchclone(包含大量数据)(即使与push一起运行时)也只是在远程连接的中间“挂起”,没有任何迹象表明它们为何停止,所以它们没有用。

有什么办法可以获取有关SSH连接中发生的情况的更多详细信息吗?

#1 楼

环境变量

从Git 2.3.0版开始,您可以使用环境变量GIT_SSH_COMMAND并传递-v详细参数,如下所示:

GIT_SSH_COMMAND="ssh -v" git clone example


更详细地说,将其命名为-vvv

GIT_SSH_COMMAND="ssh -vvv" git clone example


Git config

从Git 2.10.0版开始,它将在Ubuntu 17.04的版本中仓库,您可以全局保存此配置,也可以按以下示例保存每个仓库:

git config core.sshCommand "ssh -vvv"
git pull


评论


至少对我来说,如果这样做:GIT_SSH_COMMAND =“ ssh -v” git clone示例我可以调试SSH版本,它将克隆到消息中后打印,但在git clone上失败。在删除GIT_SSH_COMMAND之后,它就可以工作了。最终,达到了目的。

– Paulo Oliveira
16年1月18日在15:06

一次比较好:git -c core.sshCommand =“ ssh -vvv” pull

–约瑟夫·施特劳斯(Joseph K. Strauss)
17年5月2日在15:24

git config --global core.sshCommand“ ssh -vvv” git克隆示例

–偶氮
18年6月5日上午10:01

那旧版本呢? 1.8?

– khaverim
19年11月20日在18:52

我很高兴在开源生态系统中为所有问题提供解决方案。谢谢

–RajaRaviVarma
20年5月20日在6:25

#2 楼

我有一个类似的问题。为了调试,我在ssh_config中添加了一行。这是我的操作方法:

git remote -v


您会发现这样的一行:

origin  git@github.com:me/test.git (fetch)
origin  git@github.com:me/test.git (push)


在这种情况下,主机是github.com。现在,您可以在ssh配置中添加主机条目:

vim ~/.ssh/config


并添加:

Host github.com
    LogLevel DEBUG3


使用git操作时,现在应该会收到大量调试消息。要获取较少的调试消息,请尝试使用DEBUG1

对于GIT版本> = 2.3.0,请参阅@Flimm的答案以获取更智能的解决方案。

#3 楼

仔细阅读man git,可以设置一些有用的环境变量GIT_TRACE_PACKETGIT_TRACE。例如:

GIT_TRACE_PACKET=true git clone ssh://[...]


游戏有点晚了,但是希望这对某人有帮助!

评论


这很有用,但是您不会收到有关SSH连接问题的任何消息。但是,如果SSH连接有效,则这是进一步调试的方法。

–Trendfischer
2015年4月14日在9:21

#4 楼

按照man ssh

 -v      Verbose mode.  Causes ssh to print debugging messages about its progress.  This
         is helpful in debugging connection, authentication, and configuration problems.
         Multiple -v options increase the verbosity.  The maximum is 3.


所以,请尝试ssh -v。如果那不能告诉您您需要了解什么,则可以添加一个或两个v以获得更详细的调试信息。特别是对于Github,请尝试ssh -vvvT git@github.com

通常,根据我的经验,当客户端无法完成所选的身份验证方法时,会在安装过程中挂起SSH会话。检查您的私钥是否在正确的位置并具有正确的权限,并与您给Github的公钥匹配。

评论


感谢您的回答,但是我可能应该以不同的方式提出这个问题(因为GitHub不允许这样的直接SSH连接)。我编辑了帖子和标题,但是最好丢掉该帖子并创建一个新问题吗?

–IQAndreas
2013年9月12日21:52

@IQAndreas,从身份验证阶段将要执行的意义上讲,GitHub确实允许类似的SSH连接,如果问题确实在SSH步骤中发生,您将以这种方式看到它。如果您发现无法做到那么远,则说明正在发生某种事情,甚至无法建立连接。

–tgies
2013年9月13日上午10:01

我正在通过身份验证,有时可以毫无问题地在存储库上进行推/拉。但是通常它只是在命令中间“挂起”而不会继续(特别是当我传输大量数据(例如大型克隆或推送)时)。没有错误消息,它只是坐在那里并且不会继续。

–IQAndreas
2013年9月13日20:40



#5 楼

我没有办法告诉git(1)用于ssh(1)的外部命令,但是作为一种解决方法,只需将/ path / to / ssh重命名为/path/to/ssh.orig,创建一个shell脚本包装程序/ path / to / ssh,并添加-v标志:完成调试后,删除脚本并将/path/to/ssh.orig还原到/ path / to / ssh。

评论


与其将文件移动到/ usr / bin中,不如考虑将包装器脚本放在/ usr / local / bin中。

–muru
14-10-23在17:28

至少在我奇怪的Windows安装中,可以将环境变量GIT_SSH设置为指向您要Git使用的二进制文件。

–编码器
15年1月22日在10:29

如前所述,您绝对不想修改原始的ssh文件,但是我对/ usr / local /中的解决方法有所保留。它不透明,很容易踩到。更好:将解决方法脚本放入$ HOME / bin中,并将该新bin目录添加到用户的$ PATH变量中,位于其他PATH段之前。在此之前,我将检查是否没有更好的ENV var解决方案(此答案很旧)。

–斯科特·普里夫(Scott Prive)
18年11月7日在17:47