[ 
https://issues.apache.org/jira/browse/SSHD-1055?focusedWorklogId=780759&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-780759
 ]

ASF GitHub Bot logged work on SSHD-1055:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 13/Jun/22 09:10
            Start Date: 13/Jun/22 09:10
    Worklog Time Spent: 10m 
      Work Description: tomaswolf commented on PR #227:
URL: https://github.com/apache/mina-sshd/pull/227#issuecomment-1153670945

   Some tests appear to run much slower now. In particular the sshd-mina and 
sshd-sftp tests. I didn't notice any such slowdown when building locally. 
Perhaps a fluke of the GitHub CI? But surely something that needs to be 
investigated. 




Issue Time Tracking
-------------------

    Worklog Id:     (was: 780759)
    Time Spent: 40m  (was: 0.5h)

> Remote port forwarding mode does not handle EOF properly
> --------------------------------------------------------
>
>                 Key: SSHD-1055
>                 URL: https://issues.apache.org/jira/browse/SSHD-1055
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 2.5.1
>            Reporter: Feng Jiajie
>            Assignee: Thomas Wolf
>            Priority: Major
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> I want to call the remote server's gRPC service locally through an SSH 
> tunnel. 
> MyApp -> MINA SSHD -> \{Internet} -> gRPC Server
> It works just fine with OpenSSH, but there is a small problem(no problems 
> with core functions, only in unusual circumstances) with Mina SSHD.
> I think the problem is Mina SSHD's handling of EOF.
> Here is the example:
> Step 1. Start a gRPC server:
> Because we only need a gRPC server to reproduce the problem, so I write a 
> simple version without any service: 
> {code:java}
> <dependency>
>     <groupId>io.grpc</groupId>
>     <artifactId>grpc-netty-shaded</artifactId>
>     <version>1.27.2</version>
> </dependency>
> <dependency>
>     <groupId>io.grpc</groupId>
>     <artifactId>grpc-protobuf</artifactId>
>     <version>1.27.2</version>
> </dependency>
> <dependency>
>     <groupId>io.grpc</groupId>
>     <artifactId>grpc-stub</artifactId>
>     <version>1.27.2</version>
> </dependency>
> {code}
> main: 
> {code:java}
> import io.grpc.Server;
> import io.grpc.ServerBuilder;
> public class EmptyGrpcServer {
>   public static void main(String[] args) throws Exception {
>     Server server = ServerBuilder.forPort(23645).build().start();
>     server.awaitTermination();
>   }
> }
> {code}
> Full example can be fond here: 
> [https://github.com/grpc/grpc-java/blob/master/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java]
>  
> Step 2. Start a MINA SSHD server: 
> {code:java}
> import org.apache.sshd.server.SshServer;
> import org.apache.sshd.server.forward.AcceptAllForwardingFilter;
> import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
> import java.nio.file.Paths;
> public class Example1 {
>   public static void main(String[] args) throws Exception {
>     SshServer sshd = SshServer.setUpDefaultServer();
>     sshd.setPort(12133);
>     sshd.setKeyPairProvider(new 
> SimpleGeneratorHostKeyProvider(Paths.get("/tmp/a.ser")));
>     sshd.setPasswordAuthenticator((username, password, session) -> true);
>     sshd.setForwardingFilter(AcceptAllForwardingFilter.INSTANCE);
>     sshd.start();
>     Thread.sleep(10000000);
>   }
> }
> {code}
> Step 3. Create a channel using ssh client 
> {code:java}
> ssh -o 'ExitOnForwardFailure yes' -vvv -p 12133 -f -x -N -T -R 
> 0.0.0.0:0:127.0.0.1:23645 test5@127.0.0.1
> {code}
> Step 4. Reproduce
> If I connect directly to the gRPC server using curl, cause gRPC using http/2, 
> I would get error output like this: 
> {code:java}
> $ curl 127.0.0.1:23645
> ���+Unexpected HTTP/1.x request: GET /
> $
> {code}
> Then if I do step 3 with an OpenSSH server, I would get same error output:
> {code:java}
> $ ssh -o 'ExitOnForwardFailure yes' -f -x -N -T -R 0.0.0.0:0:127.0.0.1:23645 
> w...@dev.kbyte.cn
> Allocated port 13525 for remote forward to 127.0.0.1:23645
> $
> $ curl dev.kbyte.cn:13525
> ���+Unexpected HTTP/1.x request: GET / 
> $
> {code}
> But when I do step 3 with MINA SSHD, curl would stuck without any output:
> {code:java}
> $ curl 127.0.0.1:55604
> {code}
> I found MINA SSHD had already got and wrote the package with the string 
> "Unexpected.HTTP/1.x.request:.GET", and received SSH_MSG_CHANNEL_EOF.
> So I think handleEof should do more? like send SSH_MSG_CHANNEL_EOF to curl?
>  



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

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

Reply via email to