diff --git a/src/Renci.SshNet/Security/KeyExchange.cs b/src/Renci.SshNet/Security/KeyExchange.cs index a13c272a6..e7258719c 100644 --- a/src/Renci.SshNet/Security/KeyExchange.cs +++ b/src/Renci.SshNet/Security/KeyExchange.cs @@ -71,8 +71,6 @@ public virtual void Start(Session session, KeyExchangeInitMessage message) { Session = session; - SendMessage(session.ClientInitMessage); - // Determine encryption algorithm var clientEncryptionAlgorithmName = (from b in session.ConnectionInfo.Encryptions.Keys from a in message.EncryptionAlgorithmsClientToServer diff --git a/src/Renci.SshNet/Session.cs b/src/Renci.SshNet/Session.cs index 0748b8dac..2787de56c 100644 --- a/src/Renci.SshNet/Session.cs +++ b/src/Renci.SshNet/Session.cs @@ -620,6 +620,10 @@ public void Connect() // Start incoming request listener ThreadAbstraction.ExecuteThread(() => MessageListener()); + // Send SSH_MSG_KEXINIT. There is no need to await SSH_MSG_KEXINIT from the server + // Cisco switches can await SSH_MSG_KEXINIT from the client for no reason before sending it + SendMessage(ClientInitMessage); + // Wait for key exchange to be completed WaitOnHandle(_keyExchangeCompletedWaitHandle);