Я надеюсь создать SFTP-сервер в Java с помощью Apache MINA.«Соответствующий тип ключа хозяина не найден» - Apache MINA 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: [email protected],[email protected],[email protected],[email protected],ssh-rsa-[email protected],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>
Мой код запуска приложение выглядит (копируется из 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();
}
Как добавить на сервер более современные алгоритмы ключей хоста?
Спасибо, 'setAlgorithm (KeyUtils.RSA_ALGORITHM);' именно то, чего я отсутствовал, пытаясь заставить SSHD работать. Если кто-то получает «не найден соответствующий тип ключа хоста. Их предложение: ssh-dss», попробуйте установить алгоритм главного ключа на RSA! – JeroenHoek
Также не забудьте удалить все ранее сохраненные 'SERVER_KEY_FILE'! –
[Предполагаемое изменение по умолчанию] (https://github.com/apache/mina-sshd/pull/29) –