[英]“no matching host key type found” - Apache MINA SFTP server
I'm hoping to set up a SFTP server in Java using Apache MINA. 我希望使用Apache MINA在Java中设置SFTP服务器。
It seems to start OK, but when I try to connect to it with an OpenSSH client, I get: 它似乎开始正常,但当我尝试使用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
The Java app logs: 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]
My Maven dependencies are: 我的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>
My app startup code looks like (copied from https://stackoverflow.com/a/8974515/8261 ) 我的应用启动代码看起来像(从https://stackoverflow.com/a/8974515/8261复制)
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();
}
How do I add more modern host key algorithms to the server? 如何向服务器添加更多现代主机密钥算法?
This works for me: 这对我有用:
Change Maven pom.xml to remove "sshd-sftp", which is now part of "sshd-core": 更改Maven pom.xml以删除“sshd-sftp”,它现在是“sshd-core”的一部分:
<dependency>
<groupId>org.apache.sshd</groupId>
<artifactId>sshd-core</artifactId>
<version>1.0.0</version>
</dependency>
Add to " startSftpServer
": 添加到“ startSftpServer
”:
AbstractGeneratorHostKeyProvider hostKeyProvider =
new SimpleGeneratorHostKeyProvider(SERVER_KEY_FILE.toPath());
hostKeyProvider.setAlgorithm("RSA");
sshd.setKeyPairProvider(hostKeyProvider);
... there seems to be a lot of guesswork involved in using this library, which seems shady for a "security" lib. ...使用这个库似乎有很多猜测,这似乎是一个“安全”库的阴影。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.