2013-06-23 6 views
2

Я хочу насмешливый ssh-сервер для передачи файла. Для этого я использую Apache Mina SSHD. Для передачи в системе используйте JSch. с закрытым ключом.Apache SSHD & JSCH

Код клиента JSch.

JSch jSch = new JSch(); 
    jSch.addIdentity(privateKeyPath, passPhrase); 
    Session session = jSch.getSession(usernamePlans, remoteHost); 
    session.setHost(remoteHostPort); 
    config.setProperty("StrictHostKeyChecking", "no"); 
    session.setConfig(config); 
    session.setUserInfo(new StorageUserInfo(passPhrase)); 
    session.connect(); 

Apache Mina SSHD код

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

    sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(privateKeyPath)); 
    sshd.setPasswordAuthenticator(new PasswordAuthenticator() { 

     public boolean authenticate(String username, String password, ServerSession session) { 
      // TODO Auto-generated method stub 
      return true; 
     } 
    }); 

    CommandFactory myCommandFactory = new CommandFactory() { 

     public Command createCommand(String command) { 
      System.out.println("Command: " + command); 
      return null; 
     } 
    }; 
    sshd.setCommandFactory(new ScpCommandFactory(myCommandFactory)); 

    List<NamedFactory<Command>> namedFactoryList = new ArrayList<>(); 

    namedFactoryList.add(new SftpSubsystem.Factory()); 
    sshd.setSubsystemFactories(namedFactoryList); 

    sshd.start(); 

Может кто-нибудь помочь мне подключиться JSch и Apache Mina SSHD для файла переноса?

StackTrace

com.jcraft.jsch.JSchException: java.net.SocketException: Invalid argument or cannot assign requested address 

Caused by: java.net.SocketException: Invalid argument or cannot assign requested address 
+0

Хотя мне недостаточно эксперта, чтобы помочь, я не уверен, вижу ли я какое-либо насмешку над вашим кодом (или необходимость такого). –

ответ

0

Вы не должны вызывать setHost() для настройки порта. Как ясно сказано в документе.

setHost 
public void setHost(String host) 

Sets the host to connect to. This is normally called by JSch.getSession(java.lang.String, java.lang.String), so there is no need to call it, if you don't want to change this host. This should be called before connect(). 

setPort 
public void setPort(int port) 
Sets the port on the server to connect to. This is normally called by JSch.getSession(java.lang.String, java.lang.String), so there is no need to call it, if you don't want to change the port. This should be called before connect(). 

Вместо этого вы должны указать порт при вызове функции getSession(). Что-то приведенное ниже

int port=22999; 
Session session = jsch.getSession(user, host, port);