ssh: initialize libssh2

We should have been doing this, but it initializes itself upon first
use, which works as long as nobody's doing concurrent network
operations. Initialize it on our init to make sure it's not getting
initialized concurrently.
diff --git a/src/global.c b/src/global.c
index c65b21a..0bfde1e 100644
--- a/src/global.c
+++ b/src/global.c
@@ -12,6 +12,7 @@
 #include "openssl_stream.h"
 #include "thread-utils.h"
 #include "git2/global.h"
+#include "transports/ssh.h"
 
 #if defined(GIT_MSVC_CRTDBG)
 #include "win32/w32_stack.h"
@@ -56,7 +57,8 @@
 	/* Initialize any other subsystems that have global state */
 	if ((ret = git_hash_global_init()) == 0 &&
 		(ret = git_sysdir_global_init()) == 0 &&
-		(ret = git_filter_global_init()) == 0)
+		(ret = git_filter_global_init()) == 0 &&
+		(ret = git_transport_ssh_global_init()) == 0)
 		ret = git_openssl_stream_global_init();
 
 	GIT_MEMORY_BARRIER;
diff --git a/src/transports/ssh.c b/src/transports/ssh.c
index 239e0ba..35739ab 100644
--- a/src/transports/ssh.c
+++ b/src/transports/ssh.c
@@ -15,6 +15,7 @@
 #include "smart.h"
 #include "cred.h"
 #include "socket_stream.h"
+#include "ssh.h"
 
 #ifdef GIT_SSH
 
@@ -876,3 +877,18 @@
 	return -1;
 #endif
 }
+
+int git_transport_ssh_global_init(void)
+{
+#ifdef GIT_SSH
+
+	libssh2_init(0);
+	return 0;
+
+#else
+
+	/* Nothing to initialize */
+	return 0;
+
+#endif
+}
diff --git a/src/transports/ssh.h b/src/transports/ssh.h
new file mode 100644
index 0000000..2db2cc5
--- /dev/null
+++ b/src/transports/ssh.h
@@ -0,0 +1,12 @@
+/*
+ * Copyright (C) the libgit2 contributors. All rights reserved.
+ *
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
+ * a Linking Exception. For full terms see the included COPYING file.
+ */
+#ifndef INCLUDE_ssh_h__
+#define INCLUDE_ssh_h__
+
+int git_transport_ssh_global_init(void);
+
+#endif