-
Notifications
You must be signed in to change notification settings - Fork 376
Description
Version
sshd-client:2.15.0
Bug description
It throw Address already in use: bind
Exception after invoke startLocalPortForwarding
, and then invoke startLocalPortForwarding
at the same port again, it throw TcpipForwarder is closed or closing: Closed
exception, the Port Forwarding can't restart until create new ClientSession
.
Actual behavior
Port forwarding was closed after throw Address already in use: bind
exception,and can't restart in the same ClientSession
until create new instance
Expected behavior
No matter how many times invoke It should throw the same exception Address already in use: bind
,it should invoke startLocalPortForwarding
success after solve the local port conflict problem at the same ClientSession
instance
Relevant log output
java.net.BindException: Address already in use: bind
at java.base/sun.nio.ch.Net.bind0(Native Method)
at java.base/sun.nio.ch.Net.bind(Net.java:555)
at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:141)
at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:562)
at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1334)
at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:506)
at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:491)
at io.netty.handler.logging.LoggingHandler.bind(LoggingHandler.java:230)
at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:506)
at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:491)
at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:973)
at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:260)
at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:356)
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:167)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger)
at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:836)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:827)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:817)
at io.netty.bootstrap.AbstractBootstrap.doBind0(AbstractBootstrap.java:352)
at io.netty.bootstrap.AbstractBootstrap.access$000(AbstractBootstrap.java:53)
at io.netty.bootstrap.AbstractBootstrap$1.operationComplete(AbstractBootstrap.java:299)
at io.netty.bootstrap.AbstractBootstrap$1.operationComplete(AbstractBootstrap.java:286)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)
at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)
at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990)
at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:516)
at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429)
at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486)
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:167)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger)
at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:836)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:827)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:817)
at io.netty.channel.AbstractChannel$AbstractUnsafe.register(AbstractChannel.java:483)
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:89)
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:83)
at io.netty.channel.MultithreadEventLoopGroup.register(MultithreadEventLoopGroup.java:86)
at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:323)
at io.netty.bootstrap.AbstractBootstrap.doBind(AbstractBootstrap.java:272)
at io.netty.bootstrap.AbstractBootstrap.bind(AbstractBootstrap.java:268)
at org.apache.sshd.netty.NettyIoAcceptor.bindInternal(NettyIoAcceptor.java:151)
at org.apache.sshd.netty.NettyIoAcceptor.bind(NettyIoAcceptor.java:141)
at org.apache.sshd.common.forward.DefaultForwarder.doBind(DefaultForwarder.java:937)
at org.apache.sshd.common.forward.DefaultForwarder.startLocalPortForwarding(DefaultForwarder.java:194)
at org.apache.sshd.client.session.AbstractClientSession.startLocalPortForwarding(AbstractClientSession.java:446)
at cn.olange.SshDDemo.main(SshDDemo.java:56)
java.lang.IllegalStateException: TcpipForwarder is closed or closing: Closed
at org.apache.sshd.common.forward.DefaultForwarder.startLocalPortForwarding(DefaultForwarder.java:186)
at org.apache.sshd.client.session.AbstractClientSession.startLocalPortForwarding(AbstractClientSession.java:446)
at cn.olange.SshDDemo.main(SshDDemo.java:63)
Other information
` SshClient client = SshClient.setUpDefaultClient();
List keyExchangeFactories = BaseBuilder.DEFAULT_KEX_PREFERENCE
.stream()
.map(ClientBuilder.DH2KEX)
.toList();
client.setKeyExchangeFactories(keyExchangeFactories);
client.setCipherFactories(new ArrayList<>(NamedFactory.setUpBuiltinFactories(false, BaseBuilder.DEFAULT_CIPHERS_PREFERENCE)));
client.setMacFactories(new ArrayList<>(NamedFactory.setUpBuiltinFactories(false, BaseBuilder.DEFAULT_MAC_PREFERENCE)));
client.setSignatureFactories(new ArrayList<>(NamedFactory.setUpBuiltinFactories(false, BaseBuilder.DEFAULT_SIGNATURE_PREFERENCE)));
client.start();
ClientSession session = null;
try {
session = client
.connect("root", "host", 22)
.verify(1000)
.getSession();
session.addPasswordIdentity("password");
session.auth().verify(10000);
session.startLocalPortForwarding(new SshdSocketAddress("127.0.0.1", 3306), new SshdSocketAddress("127.0.0.1", 3306));
System.out.println("connection success");
} catch (IOException e) {
e.printStackTrace();
try {
session.startLocalPortForwarding(new SshdSocketAddress("127.0.0.1", 3306), new SshdSocketAddress("127.0.0.1", 3306));
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
`