You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Yuefeng (Jira)" <ji...@apache.org> on 2026/07/28 23:03:00 UTC

[jira] [Created] (SSHD-1353) SSH_MSG_KEXINIT sent first with SEND_IMMEDIATE_KEXINIT=false

Yuefeng created SSHD-1353:
-----------------------------

             Summary: SSH_MSG_KEXINIT sent first with SEND_IMMEDIATE_KEXINIT=false
                 Key: SSHD-1353
                 URL: https://issues.apache.org/jira/browse/SSHD-1353
             Project: MINA SSHD
          Issue Type: Bug
    Affects Versions: 2.16.0
            Reporter: Yuefeng


My sshClient is initialized with  SEND_IMMEDIATE_KEXINIT = false

 
{code:java}
SshClient sshClient = SshClient.setUpDefaultClient();
PropertyResolverUtils.updateProperty(sshClient, CoreModuleProperties.SEND_IMMEDIATE_KEXINIT.getName(), false); {code}
 

I observed the following exchanges with a sshd server

 
{code:java}
sessionCreated(ClientSessionImpl[null@/X:22]) tracking
initializeProxyConnector(ClientSessionImpl[null@/X:22]) no proxy to initialize
sendIdentification(ClientSessionImpl[null@/X:22]): SSH-2.0-APACHE-SSHD-2.16.0
writeBuffer(Nio2Session[local=/X:40880, remote=/X:22]) writing 28 bytes 
setupDefaultSessionIdentities(ClientSessionImpl[X@/X:22]) key identity provider override in session listener
Connected to /X:22 after 9723582 nanos
addPasswordIdentity(ClientSessionImpl[X@/X:22]) SHA256:----
doReadIdentification(ClientSessionImpl[X@/X:22]) line='SSH-2.0-OpenSSH_8.2'
readIdentification(ClientSessionImpl[X@/X:22]) Server version string: SSH-2.0-OpenSSH_8.2
sendKexInit(ClientSessionImpl[X@/X:22]) Send SSH_MSG_KEXINIT{code}
'SSH_MSG_KEXINIT' is sent from mina ssh before peer has sent 'SSH_MSG_KEXINIT'. This peer happens to be sensitive about the order of 'SSH_MSG_KEXINIT', so negotiation stalls.

In AbstractClientSession.class, it looks like unless a KexExtensionHandler for PREKEX is set, KEXINIT is sent regardless of 'sendImmediateKexInit=false'
{code:java}
protected void initializeKeyExchangePhase() throws Exception {
    KexExtensionHandler extHandler = getKexExtensionHandler();
    if ((extHandler == null) || (!extHandler.isKexExtensionsAvailable(this, AvailabilityPhase.PREKEX))) {
        kexState.set(KexState.INIT);
        sendKexInit();
    ...
}

protected boolean readIdentification(Buffer buffer) throws Exception {
    ...
    } else if (!sendImmediateKexInit) {
       // if client identification sent, perhaps we delayed KEX-INIT
       initializeKeyExchangePhase();
    }
}{code}
 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@mina.apache.org
For additional commands, e-mail: dev-help@mina.apache.org