You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by Renato Ferreira <re...@gmail.com> on 2013/11/21 15:02:33 UTC

SSHD not clearly closing sessions

Hello, all!

I noted that, after receiving a given amount of data, the server session is
not able to close the connection properly.

A good connection with a small amount of data transferred looks like the
following:

==> Call to onExit callback.
[pool-3-thread-1] DEBUG org.apache.sshd.server.channel.ChannelSession -
Send SSH_MSG_CHANNEL_EOF on channel 101
[pool-3-thread-1] DEBUG org.apache.sshd.common.io.nio2.Nio2Session -
Writing 52 bytes
[pool-3-thread-1] DEBUG org.apache.sshd.server.channel.ChannelSession -
Send SSH_MSG_CHANNEL_REQUEST exit-status on channel 101
[pool-2-thread-2] DEBUG org.apache.sshd.common.io.nio2.Nio2Session - Read
36 bytes
[pool-3-thread-1] DEBUG org.apache.sshd.common.io.nio2.Nio2Session -
Writing 68 bytes
[pool-2-thread-2] DEBUG org.apache.sshd.server.session.ServerSession -
Received packet SSH_MSG_CHANNEL_EOF
[pool-2-thread-2] DEBUG org.apache.sshd.server.channel.ChannelSession -
Received SSH_MSG_CHANNEL_EOF on channel 101
[pool-3-thread-1] DEBUG org.apache.sshd.server.channel.ChannelSession -
Closing channel 101 gracefully
[pool-3-thread-1] DEBUG org.apache.sshd.server.channel.ChannelSession -
Wait 5s for shell to exit cleanly
[pool-2-thread-3] DEBUG org.apache.sshd.common.io.nio2.Nio2Session - Read
36 bytes
[pool-2-thread-3] DEBUG org.apache.sshd.server.session.ServerSession -
Received packet SSH_MSG_CHANNEL_CLOSE
[pool-2-thread-3] DEBUG org.apache.sshd.server.channel.ChannelSession -
Received SSH_MSG_CHANNEL_CLOSE on channel 101
==> Received the destroy() callback.
[pool-3-thread-1] DEBUG org.apache.sshd.server.channel.ChannelSession -
Send SSH_MSG_CHANNEL_CLOSE on channel 101
[pool-3-thread-1] DEBUG org.apache.sshd.common.io.nio2.Nio2Session -
Writing 52 bytes
[pool-2-thread-5] DEBUG org.apache.sshd.common.io.nio2.Nio2Session - Socket
has been disconnected, closing IoSession now
[pool-2-thread-5] DEBUG org.apache.sshd.common.io.nio2.Nio2Session -
Closing Nio2Session
[pool-2-thread-5] DEBUG org.apache.sshd.common.io.nio2.Nio2Session -
Closing socket
[pool-2-thread-5] DEBUG org.apache.sshd.server.session.ServerSession -
Closing session
[pool-2-thread-5] DEBUG org.apache.sshd.server.session.ServerSession -
Closing IoSession
[pool-2-thread-5] DEBUG org.apache.sshd.server.session.ServerSession -
IoSession closed
[pool-2-thread-5] INFO org.apache.sshd.server.session.ServerSession -
Session 123@/0:0:0:0:0:0:0:1:62075 closed

And this is what happen to a connection that is not clearly closed:

==> Call to onExit callback.
[pool-3-thread-1] DEBUG org.apache.sshd.server.channel.ChannelSession -
Send SSH_MSG_CHANNEL_EOF on channel 101
[pool-3-thread-1] DEBUG org.apache.sshd.common.io.nio2.Nio2Session -
Writing 52 bytes
[pool-3-thread-1] DEBUG org.apache.sshd.server.channel.ChannelSession -
Send SSH_MSG_CHANNEL_REQUEST exit-status on channel 101
[pool-2-thread-4] DEBUG org.apache.sshd.common.io.nio2.Nio2Session - Read
36 bytes
[pool-3-thread-1] DEBUG org.apache.sshd.common.io.nio2.Nio2Session -
Writing 68 bytes
[pool-2-thread-4] DEBUG org.apache.sshd.server.session.ServerSession -
Received packet SSH_MSG_CHANNEL_EOF
[pool-2-thread-4] DEBUG org.apache.sshd.server.channel.ChannelSession -
Received SSH_MSG_CHANNEL_EOF on channel 101
[pool-3-thread-1] DEBUG org.apache.sshd.server.channel.ChannelSession -
Closing channel 101 gracefully
[pool-3-thread-1] DEBUG org.apache.sshd.server.channel.ChannelSession -
Wait 5s for shell to exit cleanly
[pool-3-thread-1] DEBUG org.apache.sshd.server.channel.ChannelSession -
Send SSH_MSG_CHANNEL_CLOSE on channel 101
[pool-3-thread-1] DEBUG org.apache.sshd.common.io.nio2.Nio2Session -
Writing 52 bytes

In this second faulty example, the destroy method is never called and the
connection only closes with the 10 minutes (600000ms) threshold.

Is it a kind of bug or am I misusing the application? Note that I'm not
running a shell application, but in this place I'm creating a Lanterna (
code.google.com/p/lanterna) based shell directly by implementing Command
interface and its factory. In order to confirm this behavior I tried to run
the default SSHD implementation (SshServer.main(String[] args)) and it's
still getting the same errors.

Does someone have any idea about how to get it working?

Thanks,

Renato A. Ferreira