Java &引用;找不到匹配的主机密钥类型";-ApacheMina SFTP服务器

Java &引用;找不到匹配的主机密钥类型";-ApacheMina SFTP服务器,java,sshd,apache-mina,Java,Sshd,Apache Mina,我希望使用ApacheMina在Java中建立一个SFTP服务器 一开始似乎还可以,但当我尝试使用OpenSSH客户端连接到它时,我得到: $ ssh localhost -p 2222 Unable to negotiate with ::1: no matching host key type found. Their offer: ssh-dss $ ssh -V OpenSSH_7.1p1, OpenSSL 1.0.2d 9 Jul 2015 Java应用程序日志: ! java.la

我希望使用ApacheMina在Java中建立一个SFTP服务器

一开始似乎还可以,但当我尝试使用OpenSSH客户端连接到它时,我得到:

$ ssh localhost -p 2222
Unable to negotiate with ::1: no matching host key type found. Their offer: ssh-dss
$ ssh -V
OpenSSH_7.1p1, OpenSSL 1.0.2d 9 Jul 2015
Java应用程序日志:

! java.lang.IllegalStateException: Unable to negotiate key exchange for server host key algorithms (client: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,ssh-rsa / server: ssh-dss)
! at org.apache.sshd.common.session.AbstractSession.negotiate(AbstractSession.java:1279) ~[sshd-core-1.0.0.jar:1.0.0]
我的Maven依赖项是:

<dependency>
    <groupId>org.apache.sshd</groupId>
    <artifactId>sshd-sftp</artifactId>
    <version>0.11.0</version>
</dependency>

<dependency>
    <groupId>org.apache.sshd</groupId>
    <artifactId>sshd-core</artifactId>
    <version>1.0.0</version>
</dependency>

org.apache.sshd
)

import org.apache.sshd.common.NamedFactory;
导入org.apache.sshd.server.Command;
导入org.apache.sshd.server.SshServer;
导入org.apache.sshd.server.auth.UserAuth;
导入org.apache.sshd.server.auth.UserAuthNoneFactory;
导入org.apache.sshd.server.command.ScpCommandFactory;
导入org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
导入org.apache.sshd.sftp.subsystem.sftpusubsystem;
私有void startSftpServer()引发IOException{
SshServer sshd=SshServer.setUpDefaultServer();
设置端口(2222);
sshd.setKeyPairProvider(新的SimpleGeneratorHostKeyProvider(
新文件(“hostkey.ser”);
List UserAuthFactorys=new ArrayList();
添加(新的UserAuthNoneFactory());
sshd.setUserAuthFactorys(UserAuthFactorys);
setCommandFactory(新的ScpCommandFactory());
List namedFactoryList=new ArrayList();
namedFactoryList.add(新的sftpusbsystem.Factory());
sshd.SetSubsystemFactorys(命名工厂列表);
sshd.start();
}
如何向服务器添加更现代的主机密钥算法?

这对我很有用:

更改Maven pom.xml以删除“sshd sftp”,它现在是“sshd core”的一部分:


。。。在使用这个库的过程中似乎有很多猜测,这对于“安全”库来说似乎是不可靠的。

谢谢,
setAlgorithm(KeyUtils.RSA\u ALGORITHM)正是我试图让SSHD工作时所缺少的。如果有人得到“找不到匹配的主机密钥类型。他们提供:ssh dss”,请尝试将主机密钥算法设置为RSA!还要记住删除以前保存的
服务器密钥文件
!对我来说,Java_161抛出了一个异常:Java.security.InvalidKeyException:SHA-1摘要算法的安全强度不够,这些行保存了一天:AbstractGeneratorHostKeyProvider hostKeyProvider=new SimpleGeneratorHostKeyProvider(path.get(“keystore”);hostKeyProvider.setAlgorithm(KeyUtils.DSS_算法);hostKeyProvider.setKeySize(512);
import org.apache.sshd.common.NamedFactory;
import org.apache.sshd.server.Command;
import org.apache.sshd.server.SshServer;
import org.apache.sshd.server.auth.UserAuth;
import org.apache.sshd.server.auth.UserAuthNoneFactory;
import org.apache.sshd.server.command.ScpCommandFactory;
import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
import org.apache.sshd.sftp.subsystem.SftpSubsystem;

private void startSftpServer() throws IOException {
    SshServer sshd = SshServer.setUpDefaultServer();
    sshd.setPort(2222);
    sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(
            new File("hostkey.ser")));

    List<NamedFactory<UserAuth>> userAuthFactories = new ArrayList<NamedFactory<UserAuth>>();
    userAuthFactories.add(new UserAuthNoneFactory());
    sshd.setUserAuthFactories(userAuthFactories);

    sshd.setCommandFactory(new ScpCommandFactory());

    List<NamedFactory<Command>> namedFactoryList = new ArrayList<NamedFactory<Command>>();
    namedFactoryList.add(new SftpSubsystem.Factory());
    sshd.setSubsystemFactories(namedFactoryList);

    sshd.start();
}
<dependency>
    <groupId>org.apache.sshd</groupId>
    <artifactId>sshd-core</artifactId>
    <version>1.0.0</version>
</dependency>
    AbstractGeneratorHostKeyProvider hostKeyProvider =
            new SimpleGeneratorHostKeyProvider(SERVER_KEY_FILE.toPath());

    hostKeyProvider.setAlgorithm("RSA");
    sshd.setKeyPairProvider(hostKeyProvider);