Patrik Ek created SSHD-968:
------------------------------

             Summary: SshClient times out during keep-alive, when 
SSH_MSG_GLOBAL_REQUEST is replies with SSH_MSG_UNSUPPORTED
                 Key: SSHD-968
                 URL: https://issues.apache.org/jira/browse/SSHD-968
             Project: MINA SSHD
          Issue Type: Improvement
    Affects Versions: 2.3.0
         Environment: Windows 10
            Reporter: Patrik Ek


In case SSH_MSG_GLOBAL_REQUEST is not supported by the remote SSH server, the 
keep-alive heartbeat times out. The reason for this is SSH_MSG_UNIMPLEMENTED is 
only logged in

{color:#172b4d}org.apache.sshd.common.session.helpers{color}.AbstractSession

The method identifying the SSH_MSG_UNIMPLEMENTED is called 
AbstractSession.doHandleMessage()

The consequense is that no reply is received and the heartbeat times out 
instead of calling AbstractSession.requestFailure(). Which in turn leads to the 
session terminates.

According to RFC 4253 sect. 11.4 
({color:#004000}https://tools.ietf.org/html/rfc4253#section-11.4{color}) the 
SSH_MSG_UNIMPLEMENTED is meant to be ignored, but this makes little sense for a 
heartbeat, as even SSH_MSG_UNIMPLEMENTED is good enough to count as a reply for 
this. This is for example the case in OpenSSH, where SSH_MSG_UNIMPLEMENTED 
replies for heartbeat, does not lead to a termination of the SSH session.

There is a workaround released in 2.1.1, to use ReservedSessionMessagesHandler 
for handling replies, but this does not allow access to the method 
AbstractSession.requestFailure() (without using reflection so to say). Further, 
the heartbeat is ongoing in the background, so there is no good solution to 
this problem from outside of the framework.

https://issues.apache.org/jira/browse/SSHD-887?jql=project%20%3D%20SSHD%20AND%20fixVersion%20%3D%202.1.1

Would this be possible to fix? The reason I write it here is because the bug 
seems to existing up to some version of libssh, even for the SSHv2 protocol, so 
just writing a bug report on the particular server will not solve the problems 
for already existing implementations using libssh.

The following config is used,

SshClient client = 
SshClient.setUpDefaultClient(){color:#cc7832};{color}{color:#808080}
{color} {color:#172b4d}PropertyResolverUtils.updateProperty(client, 
ClientFactoryManager.HEARTBEAT_INTERVAL, 15000);
 
PropertyResolverUtils.updateProperty(client,ClientFactoryManager.HEARTBEAT_REPLY_WAIT,
 30000);
 
PropertyResolverUtils.updateProperty(client,ClientFactoryManager.HEARTBEAT_REQUEST,
 "keepal...@openssh.com");{color}

{color:#cc7832}{color:#172b4d}BR{color}
{color:#172b4d}Patrik{color}
{color}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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

Reply via email to