Apache MINA SSHD — проблемы с методом аутентификации при подключении к серверу

Я пытаюсь следовать руководству Apache MINA по настройке сервера SSHD, но я столкнуться с проблемами при подключении к нему с помощью PuTTY. Я ввожу имя пользователя, но затем получаю следующее сообщение об ошибке: введите здесь описание изображения

Ниже приведен код моего сервера. Нужно ли вручную устанавливать метод аутентификации для сервера? Или я делаю что-то еще не так?

sshd = SshServer.setUpDefaultServer();
sshd.setPort(3333);

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

sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser"));

sshd.start();

person user1049697    schedule 09.09.2013    source источник


Ответы (1)


Я только что создал образец, который работает для меня. Я использую Putty для подключения к Apache SSHD. Версия Lib, которую я использовал, была «apache-sshd-0.9.0» (загружена: 2014-02-04). JDK 1.7.

основная часть моего образца выглядит так:

public static void main(String[] args) throws IOException
{
  SshServer sshd = SshServer.setUpDefaultServer();
  sshd.setPort(22);
  sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("./keys/mysample", 
            SimpleGeneratorHostKeyProvider.SSH_RSA));

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

  sshd.setPasswordAuthenticator(new PasswordAuthenticator() {
  public boolean authenticate(String username, String password, ServerSession session) {
    return "tomek".equals(username) && "123".equals(password);
    }
  });

  sshd.setShellFactory(new MyCommandFactory());

  sshd.start();
  while (true) ;
}

как вы можете видеть, я создал свою собственную фабрику команд следующим образом: (кстати. вопрос о SO был очень полезен для меня)

public class MyCommandFactory  implements CommandFactory, Factory<Command>
{
  public Command createCommand(String s)
  {
    System.out.println("command requested: " + s);
    return new MyCommand(s);
  }

  public Command create()
  {
    return createCommand("none");
  }
}

для проверки создайте такую ​​команду:

public class MyCommand implements Command
{

  private String name;

  private InputStream inputStream;
  private OutputStream outputStream;
  private ExitCallback exitCallback;

  public MyCommand(String name)
  {
    this.name = name;
  }

  public void setInputStream(final InputStream inputStream)
  {
    System.out.println("input stream was set on command: " + name);
    this.inputStream = inputStream;
  }

  public void setOutputStream(final OutputStream outputStream)
  {
    System.out.println("output stream was set on command: " + name);
    this.outputStream = outputStream;
  }

  public void setErrorStream(OutputStream outputStream)
  {
    System.out.println("error stream was set on command: " + name);
  }

  public void setExitCallback(ExitCallback exitCallback)
  {
    System.out.println("exit callback was set on command: " + name);
    this.exitCallback = exitCallback;
  }

  public void start(Environment environment) throws IOException
  {
    try
    {

      final PrintWriter writer = new PrintWriter(outputStream, true);
      writer.println("Welcome to Java SSH echo server!");
      writer.flush();

      // ... here you gonna read input from remote client ...
      // use writer to write back responses
    }
    catch (final Exception e)
    {
      e.printStackTrace();
    }
  }

  public void destroy()
  {
    System.out.println("destroy was called on command: " + name);
    // client or server closed connection, clean up resources here
  }
}

как видите, я использовал ключевой файл './keys/mysample'. чтобы создать такой ключевой файл, попробуйте это: (кстати, этот вопрос на SO был полезен для этого)

keytool -genkey -keystore ./keys/mysample" -keyalg RSA

и вуаля:

результат этого примера

я надеюсь, что это полезно для кого-то.

[EDIT] посмотрите здесь еще лучший эхо-сервер: http://svn.apache.org/repos/asf/mina/sshd/trunk/sshd-core/src/test/java/org/apache/sshd/util/EchoShellFactory.java

person Chris    schedule 04.02.2014
comment
Привет, это именно то, что я ищу. Но не могли бы вы сказать мне, как мне запустить это? например, мне нужно запустить класс java, который запускает поток на сервере, а затем попытаться установить ssh-соединение с пользователем (tomek в вашем примере) и паролем, чтобы запустить этот поток? Мне нужно реализовать две команды костюма для моего проекта - person Ghost Rider; 02.02.2016