Apache Mina SSHD 1.0服务器立即退出

时间:2015-12-17 01:02:26

标签: java apache sftp mina sshd

我正在使用Apache Mina sshd-core-1.0.0来启动SFTP守护程序。然而,该程序在sshd.start()之后退出。没有错误。但是,如果我使用sshd-core-0.0.14,服务器启动就可以了,我可以启动SFTP会话。我错过了1.0.0的东西吗?

1.0.0的代码段(不起作用)

public static void main(String[] args) throws IOException {
    SshServer sshd = SshServer.setUpDefaultServer();
    sshd.setPort(2222);
    sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(new File ("hostkey.ser")))   
    sshd.setPasswordAuthenticator(new AuthenticatorImpl());
    sshd.start();
}

代码段0.0.14(有效)

public static void main(String[] args) throws IOException {
    SshServer sshd = SshServer.setUpDefaultServer();
    sshd.setPort(2222);
    sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser")); 
    sshd.setPasswordAuthenticator(new AuthenticatorImpl());
    sshd.start();
}

1.0.0运行时输出以下内容。代码开始正常,但在sshd.start()语句之后终止。

2015-12-16 19:57:38,510 DEBUG SFTPServer.main(SFTPServer.java:26) message
2015-12-16 19:57:38,767 INFO org.apache.sshd.common.util.SecurityUtils$BouncyCastleRegistration.call(SecurityUtils.java:145) Trying to register BouncyCastle as a JCE provider
2015-12-16 19:57:39,076 INFO org.apache.sshd.common.util.SecurityUtils$BouncyCastleRegistration.call(SecurityUtils.java:149) Registration succeeded
2015-12-16 19:57:39,105 DEBUG org.apache.sshd.common.io.nio2.Nio2Acceptor.bind(Nio2Acceptor.java:57) Binding Nio2Acceptor to address 0.0.0.0/0.0.0.0:2222
2015-12-16 19:57:39,114 INFO SFTPServer.main(SFTPServer.java:32) Started

2 个答案:

答案 0 :(得分:2)

SshServer.Start仅开始侦听传入端口。它不会阻止。因此main之后立即终止。这在0.0.14中应该没有任何不同,但我不能尝试。

您必须明确等待main以保持服务器正常运行。

了解SshServer.main的实施方式(0.0.14和1.0.0):

public static void main(String[] args) throws Exception {

    ...

    SshServer sshd = SshServer.setUpDefaultServer();

    ...

    sshd.start();

    Thread.sleep(Long.MAX_VALUE);
}

答案 1 :(得分:0)

我遇到了同样的问题,这是因为 SSHD 不知道要使用哪个网络库。 我已经添加了 Netty 包:

<dependency>
    <groupId>org.apache.sshd</groupId>
    <artifactId>sshd-netty</artifactId>
    <version>2.6.0</version>
</dependency>

它在没有 Thread.sleep() 调用的情况下工作。在日志中,您将看到:

[main] INFO org.apache.sshd.common.io.DefaultIoServiceFactoryFactory - Using NettyIoServiceFactoryFactory

然后 Netty 开始响应:

[nioEventLoopGroup-2-1] INFO io.netty.handler.logging.LoggingHandler - [id: 0x7fa79050] REGISTERED
[nioEventLoopGroup-2-1] INFO io.netty.handler.logging.LoggingHandler - [id: 0x7fa79050] BIND: 0.0.0.0/0.0.0.0:2222
[nioEventLoopGroup-2-1] INFO io.netty.handler.logging.LoggingHandler - [id: 0x7fa79050, L:/[0:0:0:0:0:0:0:0]:2222] ACTIVE

我没有在 Maven 中添加任何其他 Netty 库。