217

When using GIT, I have problems with using GIT over SSH, and since it works just fine both from work, and at home with a different modem, it's obviously my home modem that is acting up. I have no problems connecting over HTTP.

So, I'm assuming it is an SSH problem, but I'm no expert at using it directly. Is there any command I can run which sets up a "test" connection, and lets me know exactly when and where along the line the problem occurs?

Pretty much all "larger" commands (such as fetch, clone, or push with much data) from git (even when run with -v) just "hang" in the middle of connecting remotely with no indication as to why they have stopped, so they are of no use.

Is there any way I can get more details on what is happening in the SSH connection?

muru
  • 207,228
IQAndreas
  • 3,298

5 Answers5

280

Environment variable

From Git version 2.3.0, you can use the environment variable GIT_SSH_COMMAND and pass the -v verbose argument like this:

GIT_SSH_COMMAND="ssh -v" git clone example

To be extra verbose, make it -vvv:

GIT_SSH_COMMAND="ssh -vvv" git clone example

Git config

From Git version 2.10.0, which will in Ubuntu 17.04's repos, you can save this configuration globally, or per repo as in this example:

git config core.sshCommand "ssh -vvv"
git pull
Flimm
  • 44,031
98

I had a similar problem. For debugging I added a line in my ssh_config. Here is how I've done it:

git remote -v

There you will find a line like this:

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

In this case the host is github.com. Now you can add a Host-Entry in you ssh config:

vim ~/.ssh/config

And add:

Host github.com
    LogLevel DEBUG3

On using git operations, you should get plenty of debug messages, now. To get lesser debug messages, try using DEBUG1

For GIT versions >= 2.3.0 see the answer from @Flimm for a smarter solution.

Trendfischer
  • 1,252
16

Reading through man git, there are some useful environmental variables you can set, GIT_TRACE_PACKET and GIT_TRACE. For example:

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

A bit late to the game, but hopefully this helps someone!

bcherny
  • 269
5

Per 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.

So, try ssh -v. If that doesn't tell you what you need to know, you can add one or two vs for even more detailed debugging information. For Github in particular, try ssh -vvvT git@github.com.

Usually, in my experience, an SSH session hanging during setup happens when the client can't complete the chosen authentication method. Check that your private key is in the right place with the right permissions and matches the public key you've given Github.

tgies
  • 509
3

I don't see a way to tell git(1) the external command to use for ssh(1), but as a workaround, simply rename /path/to/ssh to /path/to/ssh.orig, create a shell script wrapper /path/to/ssh, and add in the -v flags:

$ sudo mv /usr/bin/ssh /usr/bin/ssh.orig
$ sudo vim /usr/bin/ssh
$ cat /usr/bin/ssh
#!/bin/sh

if [ -x /usr/bin/ssh.orig ]; then
    exec /usr/bin/ssh.orig -v -v -v "${@}"
fi

$ sudo chmod a+x /usr/bin/ssh

I get verbose output when executing git commands operating over an ssh transport. Once done debugging, delete the script and restore /path/to/ssh.orig to /path/to/ssh.