Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86

    Errore durante la connessione ssh con jsch

    Salve ragazzi ho due classi che mi permettono di connettermi a un server su cui gira il demone ssh. Per connnettermi passo una stringa del tipo nomeutente@indirizzohost:numero porta. Quando effettuo la connessione e premo yes per poter inserire la password successivamente ho questo errore :

    codice:
    Are you sure to want to continue connecting?
    yes 
    com.jcraft.jsch.JSchException : Auth fail 
    at com.jcraft.jsch.Session.connect<Session.java:461>
    at com.jcraft.jsch.Session.connect<Session.java:154>
    at SshClient.main<Sshclient.java:61>

    La classe SshClient è la seguente :
    codice:
    
    import com.jcraft.jsch.ChannelShell;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.JSchException;
    import com.jcraft.jsch.Session;
    import com.jcraft.jsch.UserInfo;
    
    public class SshClient {
    
      public static void main(String[] args) {
        try {
    
          /**
           * Verifico che la stringa di connessione sia corretta
           */
          if (args.length == 0) {
            System.out.println("Usage: user@host:port");
            return;
          }
    
          if (!args[0].contains("@")) {
            System.out.println("Usage: user@host:port");
          }
    
          /**
           * Recupero utente, host e porta
           */
          String user = args[0].substring(0, args[0].indexOf('@'));
    
          String host = null;
          
          /**
           * La porta di default dell'ssh è 22
           */
          int port = 22;
    
          if (args[0].contains(":")) {
            host = args[0].substring(args[0].indexOf('@') + 1, args[0].indexOf(":"));
            port = Integer.parseInt(args[0].substring(args[0].indexOf(':') + 1));
          } else {
            host = args[0].substring(args[0].indexOf('@') + 1);
          }
    
          /**
           * Inizializzo il framework e creo la session
           */
          JSch jsch = new JSch();
    
          Session session = jsch.getSession(user, host, port);
    
          /**
           * Setto la classe UserInfo per recupare la password dell'utente
           */
          UserInfo ui = new MrWebmasterUserInfo();
          session.setUserInfo(ui);
    
          /**
           * Eseguo la connessione della sessione
           */
          session.connect();
    
          /**
           * Creo il channel shell
           */
          ChannelShell channel = (ChannelShell) session.openChannel("shell");
          
          /**
           * Associo stdin e stdout
           */
          channel.setInputStream(System.in);
    
          /**
           * per Windows
           * 
           * channel.setInputStream(new FilterInputStream(System.in) { public
           * int read(byte[] b, int off, int len) throws IOException { return
           * in.read(b, off, (len > 1024 ? 1024 : len)); } });
           */
          channel.setOutputStream(System.out);
    
          /**
           * Eseguo la connessione con un timeout di 3 secondi
           */
          channel.connect(3000);
    
          /**
           * Controllo ogni secondo se il canale è stato chiuso
           */
          while (true) {
            if (channel.isClosed()) {
              System.exit(channel.getExitStatus());
            } else {
              try {
                Thread.sleep(1000);
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
            }
          }
        } catch (JSchException e) {
          e.printStackTrace();
        }
      }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86
    mentre la seconda classe per reperire le credenziali utente è :
    codice:
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import com.jcraft.jsch.UserInfo;
    
    public class SshClientUserInfo implements UserInfo {
    
      private String password;
      private String passphrase;
    
      /**
       * Restituisco la passphrase
       * salvata in precedenza
       */
      @Override
      public String getPassphrase() {
        return passphrase;
      }
    
      /**
       * Restituisco la password
       * salvata in precedenza
       */
      @Override
      public String getPassword() {
        return password;
      }
    
      /**
       * Chiedo all'utente di inserire la passphrase
       */
      @Override
      public boolean promptPassphrase(String message) {
        /**
         * Resetto la passphrase precedente
         */
        passphrase = null;
      
        /**
         * Stampo il messaggio
         */
        System.out.println(message);
        
        /**
         * Leggo la passphrase
         */
        passphrase = readOneLine();
        
        /**
         * Controllo l'input
         */
        if (passphrase != null && passphrase.length() > 0) {
          return true;
        } else {
          return false;
        }
      }
    
      /**
       * Chiedo all'utente di inserire la password
       */
      @Override
      public boolean promptPassword(String message) {
        /**
         * Resetto la passphrase password
         */
        password = null;
        
        /**
         * Stampo il messaggio
         */
        System.out.println(message);
    
        /**
         * Leggo la password
         */
        password = readOneLine();
        
        /**
         * Controllo l'input
         */
        if (password != null && password.length() > 0) {
          return true;
        } else {
          return false;
        }
      }
    
      /**
       * Chiedo all'utente di dare l'autorizzazione 
       * per la connessione ad un host non verificato
       */
      @Override
      public boolean promptYesNo(String message) {
        /**
         * Stampo il messaggio
         */
        System.out.println(message);
    
        /**
         * Verifico se l'utente ha inserito yes
         */
        String s = readOneLine();
        if ("yes".equalsIgnoreCase(s)) {
          return true;
        }
    
        return false;
      }
    
      /**
       * Stampo un messaggio del framework
       */
      @Override
      public void showMessage(String message) {
        System.out.println(message);
      }
    
      /**
       * Metodo di utility per leggere l'input dell'utente
       */
      private String readOneLine() {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        try {
          return in.readLine();
        } catch (IOException e) {
          e.printStackTrace();
          return null;
        }
      }
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86
    Ho risolto, in pratica il programma funzionava correttamente era la virtual machine su cui mi connettevo in ssh che mi creava problemi !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.