diff --git a/src/Renci.SshNet/ConnectionInfo.cs b/src/Renci.SshNet/ConnectionInfo.cs
index 02e817b24..023546948 100644
--- a/src/Renci.SshNet/ConnectionInfo.cs
+++ b/src/Renci.SshNet/ConnectionInfo.cs
@@ -187,6 +187,14 @@ public class ConnectionInfo : IConnectionInfoInternal
         /// 
         public int MaxSessions { get; set; }
 
+        /// 
+        /// For servers that wait for the Key Exchange message, send the SSH_MSG_KEXINIT explicitly on connect()
+        /// 
+        /// 
+        /// True to initiate the key exchange on connect(). Default is false.
+        /// 
+        public bool InitiateKeyExchange { get; set; }
+
         /// 
         /// Occurs when authentication banner is sent by the server.
         /// 
@@ -341,6 +349,7 @@ public ConnectionInfo(string host, int port, string username, ProxyTypes proxyTy
             ChannelCloseTimeout = DefaultChannelCloseTimeout;
             RetryAttempts = 10;
             MaxSessions = 10;
+            InitiateKeyExchange = false;
             Encoding = Encoding.UTF8;
 
             KeyExchangeAlgorithms = new Dictionary
diff --git a/src/Renci.SshNet/Session.cs b/src/Renci.SshNet/Session.cs
index c984d3109..41ea907eb 100644
--- a/src/Renci.SshNet/Session.cs
+++ b/src/Renci.SshNet/Session.cs
@@ -650,6 +650,11 @@ public void Connect()
                     // ToDo: Make message pump async, to not consume a thread for every session
                     _ = ThreadAbstraction.ExecuteThreadLongRunning(MessageListener);
 
+                    if (ConnectionInfo.InitiateKeyExchange)
+                    {
+                        SendMessage(ClientInitMessage);
+                    }
+
                     // Wait for key exchange to be completed
                     WaitOnHandle(_keyExchangeCompletedWaitHandle);