IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Classe java créant des sessions ssh


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Par défaut Classe java créant des sessions ssh
    Bonjour,

    Existe-il une classe écrite en java qui peut offrir la possibilité de se connecter à distance depuis un pc windows (xp ou server 2003) vers un autre pc windows (xp ou server 2003) au sein d'un réseau local qui est géré par un contrôleur de domaine affin d'obtenir une console Ms-DOS pour exécuter des commandes et récupérer leur résultats ?

    j'ai tout de suite penser à ssh, alors j'ai cherché un peu et j'ai trouvé la classe jsch http://www.jcraft.com/jsch mais elle ne gère pas les domaines car la définission de la fonction getSession jsch.getSession(user, host, port); ne contient que 3 paramètres en plus je crois pas que windows xp ou server 2003 disposent déjà d'un serveur ssh natif.

    Pouvez vous m'aidez sur ce sujet?

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Les PC n'ont pas accès l'un a l'autre directement sans passer par le contrôleur de domaine ? (connait pas trop ces truc de "controleur de domaine donc jvais ptet dire des conneries, pas tapper)
    Sinon je ne vois pas de problèmes, http://www.jcraft.com/jsch fonctionne parfaitement, et en theorie si tes PC peuvent communiquer entres eux comme sur tout réseau normal et que ceux ci ont un serveur SSH installé ca devrait marcher comme sur des roulettes.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Par défaut
    C bon ça marche avec l'exemple suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
     
    /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */
    import com.jcraft.jsch.*;
    import java.awt.*;
    import javax.swing.*;
    import java.io.*;
     
    public class Exec{
      public static void main(String[] arg){
        try{
          JSch jsch=new JSch();  
     
          String host=null;
          if(arg.length>0){
            host=arg[0];
          }
          else{
            host=JOptionPane.showInputDialog("Enter username@hostname",
                                             System.getProperty("user.name")+
                                             "@localhost"); 
          }
          String user=host.substring(0, host.indexOf('@'));
          host=host.substring(host.indexOf('@')+1);
     
          Session session=jsch.getSession(user, host, 22);
          /*
          String xhost="127.0.0.1";
          int xport=0;
          String display=JOptionPane.showInputDialog("Enter display name", 
                                                     xhost+":"+xport);
          xhost=display.substring(0, display.indexOf(':'));
          xport=Integer.parseInt(display.substring(display.indexOf(':')+1));
          session.setX11Host(xhost);
          session.setX11Port(xport+6000);
          */
     
          // username and password will be given via UserInfo interface.
          UserInfo ui=new MyUserInfo();
          session.setUserInfo(ui);
          session.connect();
     
          String command=JOptionPane.showInputDialog("Enter command", 
                                                     "set|grep SSH");
     
          Channel channel=session.openChannel("exec");
          ((ChannelExec)channel).setCommand(command);
     
          // X Forwarding
          // channel.setXForwarding(true);
     
          //channel.setInputStream(System.in);
          channel.setInputStream(null);
     
          //channel.setOutputStream(System.out);
     
          //FileOutputStream fos=new FileOutputStream("/tmp/stderr");
          //((ChannelExec)channel).setErrStream(fos);
          ((ChannelExec)channel).setErrStream(System.err);
     
          InputStream in=channel.getInputStream();
     
          channel.connect();
     
          byte[] tmp=new byte[1024];
          while(true){
            while(in.available()>0){
              int i=in.read(tmp, 0, 1024);
              if(i<0)break;
              System.out.print(new String(tmp, 0, i));
            }
            if(channel.isClosed()){
              System.out.println("exit-status: "+channel.getExitStatus());
              break;
            }
            try{Thread.sleep(1000);}catch(Exception ee){}
          }
          channel.disconnect();
          session.disconnect();
        }
        catch(Exception e){
          System.out.println(e);
        }
      }
     
      public static class MyUserInfo implements UserInfo, UIKeyboardInteractive{
        public String getPassword(){ return passwd; }
        public boolean promptYesNo(String str){
          Object[] options={ "yes", "no" };
          int foo=JOptionPane.showOptionDialog(null, 
                 str,
                 "Warning", 
                 JOptionPane.DEFAULT_OPTION, 
                 JOptionPane.WARNING_MESSAGE,
                 null, options, options[0]);
           return foo==0;
        }
     
        String passwd;
        JTextField passwordField=(JTextField)new JPasswordField(20);
     
        public String getPassphrase(){ return null; }
        public boolean promptPassphrase(String message){ return true; }
        public boolean promptPassword(String message){
          Object[] ob={passwordField}; 
          int result=
            JOptionPane.showConfirmDialog(null, ob, message,
                                          JOptionPane.OK_CANCEL_OPTION);
          if(result==JOptionPane.OK_OPTION){
            passwd=passwordField.getText();
            return true;
          }
          else{ 
            return false; 
          }
        }
        public void showMessage(String message){
          JOptionPane.showMessageDialog(null, message);
        }
        final GridBagConstraints gbc = 
          new GridBagConstraints(0,0,1,1,1,1,
                                 GridBagConstraints.NORTHWEST,
                                 GridBagConstraints.NONE,
                                 new Insets(0,0,0,0),0,0);
        private Container panel;
        public String[] promptKeyboardInteractive(String destination,
                                                  String name,
                                                  String instruction,
                                                  String[] prompt,
                                                  boolean[] echo){
          panel = new JPanel();
          panel.setLayout(new GridBagLayout());
     
          gbc.weightx = 1.0;
          gbc.gridwidth = GridBagConstraints.REMAINDER;
          gbc.gridx = 0;
          panel.add(new JLabel(instruction), gbc);
          gbc.gridy++;
     
          gbc.gridwidth = GridBagConstraints.RELATIVE;
     
          JTextField[] texts=new JTextField[prompt.length];
          for(int i=0; i<prompt.length; i++){
            gbc.fill = GridBagConstraints.NONE;
            gbc.gridx = 0;
            gbc.weightx = 1;
            panel.add(new JLabel(prompt[i]),gbc);
     
            gbc.gridx = 1;
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.weighty = 1;
            if(echo[i]){
              texts[i]=new JTextField(20);
            }
            else{
              texts[i]=new JPasswordField(20);
            }
            panel.add(texts[i], gbc);
            gbc.gridy++;
          }
     
          if(JOptionPane.showConfirmDialog(null, panel, 
                                           destination+": "+name,
                                           JOptionPane.OK_CANCEL_OPTION,
                                           JOptionPane.QUESTION_MESSAGE)
             ==JOptionPane.OK_OPTION){
            String[] response=new String[prompt.length];
            for(int i=0; i<prompt.length; i++){
              response[i]=texts[i].getText();
            }
    	return response;
          }
          else{
            return null;  // cancel
          }
        }
      }
    }
    mais il faut installer sur chaque poste du réseau local openssh.Maintenant il y a une création de la session vers l'hôte mais la seule commande qui marche c'est la commande HELP qui retourne la liste des commandes MS-DOS les autres commandes retournent not found. J'essaye d'exécuter la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    regedit /E C:\Documents and Settings\Administrateur\x.reg HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
    Normalement elle ne devrait retourner rien, elle doit créer un fichier x.reg mais je le retrouve nulle part.

    PS : J'exécute le code en local

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    quel shell fait tourner openssh?

  5. #5
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Par défaut
    Normalement il doit retourner une console MS DOS puisque je travaille sous Windows, C'est bien le cas car quand je tape HELP après avoir ouvert une session ssh vers localhost ça retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    ASSOC    Affiche ou modifie les applications associées aux extensions de
             fichiers.
    AT       Planifie l'exécution de commandes ou programmes sur un ordinateur.
    ATTRIB   Affiche ou modifie les attributs d'un fichier.
    BREAK    Active ou désactive le contrôle étendu de CTRL+C.
    CACLS    Affiche ou modifie les listes de contrôles d'accès aux fichiers.
    CALL     Appelle un fichier de commandes depuis un autre fichier de commandes.
    CD       Modifie le répertoire ou affiche le répertoire en cours.
    CHCP     Modifie la page de code active ou affiche son numéro.
    CHDIR    Modifie le répertoire ou affiche le nom du répertoire en cours.
    CHKDSK   Vérifie un disque et affiche un relevé d'état.
    CHKNTFS  Affiche ou modifie la vérification du disque au démarrage.
    CLS      Efface l'écran.
    CMD      Lance une nouvelle instance de l'interpréteur de commandes de Windows.
    COLOR    Modifie les couleurs du premier plan et de l'arrière plan de la
             console.
    COMP     Compare les contenus de deux fichiers ou groupes de fichiers.....
    Mais c la seule commande qui retourne quelque chose il y a aussi regedit /E x.reg Nom_de_la_clé qui s'exécute parfaitement mais ne crée pas le fichier x.reg.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    de mémoire "help" n'est pas une commande interne mais un programme extérieur (help.exe) qui affiche ce texte. PAs garanti que t'aie une console dos. Openssh est basé sur cygwin qui est un portage d'applications linux. T'as probablement un script bash ou un truc du genre. La commande echo fonctionne?

Discussions similaires

  1. Importer une classe java avec des paramétres dans JSP
    Par sky88 dans le forum Servlets/JSP
    Réponses: 18
    Dernier message: 30/06/2011, 10h20
  2. Intégrer des classes Java sans relancer Tomcat
    Par tibouchou dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 09/07/2007, 10h17
  3. Utilisation d'un framework PHP depuis des classes JAVA
    Par sharivaree dans le forum Langage
    Réponses: 3
    Dernier message: 12/10/2006, 16h10
  4. [WSDL][Axis] Récupération de valeur dans des classes java
    Par cosmos38240 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 09/01/2006, 17h38
  5. Inserer des classes java existantes
    Par 2000 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/03/2003, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo