通过 SSH 测试 Git 连接的非常详细的方法?

IQA*_*eas 155 ssh command-line git

使用 GIT 时,我在通过 SSH 使用 GIT 时遇到问题,并且由于它在工作中和在家中使用不同的调制解调器都可以正常工作,因此显然是我的家用调制解调器起作用了。我通过 HTTP 连接没有问题。

所以,我假设这是一个 SSH 问题,但我不是直接使用它的专家。是否有任何我可以运行的命令来设置“测试”连接,并让我确切地知道问题发生的时间和地点?

几乎所有的“大”命令(如fetchclonepush有多少数据)从git(即使与运行-v),只是在没有指示远程连接中间的“挂起”,为什么他们已经停止,所以他们是没有用的.

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

Fli*_*imm 185

环境变量

从 Git 版本 2.3.0 开始,您可以使用环境变量GIT_SSH_COMMAND-v像这样传递详细参数:

GIT_SSH_COMMAND="ssh -v" git clone example
Run Code Online (Sandbox Code Playgroud)

为了更加详细,请使其-vvv

GIT_SSH_COMMAND="ssh -vvv" git clone example
Run Code Online (Sandbox Code Playgroud)

配置文件

从 Git 版本 2.10.0(将在 Ubuntu 17.04 的存储库中)开始,您可以全局保存此配置,或按存储库保存此配置,如下例所示:

git config core.sshCommand "ssh -vvv"
git pull
Run Code Online (Sandbox Code Playgroud)

  • 有一次这会更好:`git -c core.sshCommand="ssh -vvv" pull` (10认同)
  • 至少对我来说,如果我这样做:`GIT_SSH_COMMAND="ssh -v" git clone example` 我可以调试 SSH 版本,它在 `Cloning into` 消息后打印,但在 `git clone` 失败。删除“GIT_SSH_COMMAND”后,它就可以工作了。最终,达到了目的。 (2认同)

Tre*_*her 89

我有一个类似的问题。为了调试,我在 ssh_config 中添加了一行。这是我如何做到的:

git remote -v
Run Code Online (Sandbox Code Playgroud)

在那里你会找到这样的一行:

origin  git@github.com:me/test.git (fetch)
origin  git@github.com:me/test.git (push)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,主机是github.com。现在您可以在 ssh 配置中添加一个 Host-Entry:

vim ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

并添加:

Host github.com
    LogLevel DEBUG3
Run Code Online (Sandbox Code Playgroud)

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

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


小智 14

通读man git,您可以设置一些有用的环境变量,GIT_TRACE_PACKET并且GIT_TRACE. 例如:

GIT_TRACE_PACKET=true git clone ssh://[...]
Run Code Online (Sandbox Code Playgroud)

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


tgi*_*ies 5

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.
Run Code Online (Sandbox Code Playgroud)

所以,试试ssh -v。如果这没有告诉您需要了解的内容,您可以添加一两个vs 以获得更详细的调试信息。特别是对于 Github,请尝试ssh -vvvT git@github.com.

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