You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Andrew C (JIRA)" <ji...@apache.org> on 2013/01/30 21:23:12 UTC

[jira] [Updated] (SSHD-207) ChannelForward TCP/IP sends EOF to server after closing channel

     [ https://issues.apache.org/jira/browse/SSHD-207?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andrew C updated SSHD-207:
--------------------------

    Summary: ChannelForward TCP/IP sends EOF to server after closing channel  (was: CLONE - Direct TCP/IP Port Forward sends EOF to client after closing channel)
    
> ChannelForward TCP/IP sends EOF to server after closing channel
> ---------------------------------------------------------------
>
>                 Key: SSHD-207
>                 URL: https://issues.apache.org/jira/browse/SSHD-207
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 0.6.0
>            Reporter: Andrew C
>            Assignee: Guillaume Nodet
>             Fix For: 0.7.0
>
>
> While testing port forwarding from an OpenSSH_5.8p2 client to a MINA SSHD server, I noticed that after the first disconnection of a client from the forwarded port, the entire SSH session would be disconnected.  The client command I ran was:
> ssh -N -L 60443:<target>:443 -p 50022 tester@<minasshd>
> Looking at the traces, I saw the following from SSHD:
> 13:54:12.823 [NioProcessor-1] DEBUG o.a.s.server.session.ServerSession - Received packet SSH_MSG_CHANNEL_OPEN
> 13:54:12.823 [NioProcessor-1] INFO  o.a.s.server.session.ServerSession - Received SSH_MSG_CHANNEL_OPEN direct-tcpip
> 13:54:12.826 [NioProcessor-1] INFO  o.a.s.s.channel.ChannelDirectTcpip - Receiving request for direct tcpip: hostToConnect=<target>, portToConnect=443, originatorIpAddress=127.0.0.1, originatorPort=54145
> 13:54:15.588 [NioProcessor-1] DEBUG o.a.s.server.session.ServerSession - Received packet SSH_MSG_CHANNEL_EOF
> 13:54:15.589 [NioProcessor-1] INFO  o.a.s.s.channel.ChannelDirectTcpip - Received SSH_MSG_CHANNEL_EOF on channel 0
> 13:54:15.589 [NioProcessor-1] INFO  o.a.s.s.channel.ChannelDirectTcpip - Send SSH_MSG_CHANNEL_CLOSE on channel 0
> 13:54:15.590 [NioProcessor-1] DEBUG o.a.s.server.session.ServerSession - Received packet SSH_MSG_CHANNEL_CLOSE
> 13:54:15.590 [NioProcessor-1] INFO  o.a.s.s.channel.ChannelDirectTcpip - Received SSH_MSG_CHANNEL_CLOSE on channel 0
> 13:54:15.590 [NioProcessor-1] INFO  o.a.s.s.channel.ChannelDirectTcpip - Closing channel 0 immediately
> 13:54:15.591 [NioProcessor-1] INFO  o.a.s.s.channel.ChannelDirectTcpip - Closing channel 0 immediately
> 13:54:15.593 [NioProcessor-26] INFO  o.a.s.s.channel.ChannelDirectTcpip - Send SSH_MSG_CHANNEL_EOF on channel 0
> 13:54:15.595 [NioProcessor-1] DEBUG o.a.s.server.session.ServerSession - Received packet SSH_MSG_DISCONNECT
> 13:54:15.595 [NioProcessor-1] INFO  o.a.s.server.session.ServerSession - Received SSH_MSG_DISCONNECT (reason=2, msg=Received ieof for nonexistent channel 2.)
> 13:54:15.595 [NioProcessor-1] INFO  o.a.s.server.session.ServerSession - Closing session
> 13:54:15.595 [NioProcessor-1] DEBUG o.a.s.server.session.ServerSession - Closing IoSession
> 13:54:15.596 [NioProcessor-1] DEBUG o.a.s.server.session.ServerSession - IoSession closed
> So if I read this right, the client sends an EOF, then the server sends a CLOSE, then the client sends a CLOSE.  After all of this, the server sends back an EOF, but the channel no longer exists at the client, which causes a disconnection.
> I looked into the source code, and figured the following change might correct the issue:
> Index: sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelDirectTcpip.java
> ===================================================================
> --- sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelDirectTcpip.java	(revision 1207930)
> +++ sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelDirectTcpip.java	(working copy)
> @@ -109,7 +109,9 @@
>  
>              @Override
>              public void sessionClosed(IoSession session) throws Exception {
> +               if (!closing) {
>                  sendEof();
> +               }
>              }
>          };
>          connector.setHandler(handler);
> It appears to work, but I do not know if it is correct, or if it will break other situations.  Can anyone comment on it?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira