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

API standards et tierces Java Discussion :

Exécuter plusieurs commandes avec JSCH en EXEC ou en SHELL sur un switch


Sujet :

API standards et tierces Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Exécuter plusieurs commandes avec JSCH en EXEC ou en SHELL sur un switch
    Bonjour,

    Je développe actuellement une application en java pour la gestion des ports de switch. Afin de pouvoir modifier certains paramètres sur les ports j'utilise l'API JSCH.
    J'ai réussi à executer une commande sur mon switch mais lorsque j'en fais plusieurs j'obtiens une erreur.
    Voici mon code lorsque j'utilise ChannelExec
    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
    import java.io.InputStream;
     
    import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.ChannelExec;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.Session;
     
     
    public class SSH2 {
     
    		 public static void main(String[] args) {
    			 		// Session create
    		             String command1 = "sys";
    		             String command2 = "int GigabitEthernet1/0/1";
    		             String command3 = "duplex full";
     
    		             SSH2 test = new SSH2();		
    		             JSch jsch = new JSch();		     		
    		             String host = "adresseIP";		
    		             String username = "user";		
    		             String password = "password";		
    		             try {		
    		                   Session session = jsch.getSession(username, host, 22);		
    		                   session.setPassword(password);		
    		                   java.util.Properties config = new java.util.Properties();		
    		                   config.put("StrictHostKeyChecking", "no");		
    		                   session.setConfig(config);		
    		                   session.setPassword(password);		
    		                   session.connect();		
     
    		                   // Creation channel et passage de commande
    		                   Channel channel = session.openChannel("exec");
    		                   channel.setInputStream(null);		
    		                   channel.setOutputStream(System.out);		
    		                   ((ChannelExec) channel).setCommand(command1);		
    		                   channel.connect();		
    		                   InputStream in = channel.getInputStream();	
    		                   System.out.println(in.available());
    		                   System.out.println(channel.isClosed());
    		                   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) {
    		                        	 ee.printStackTrace();
    		                         }
    		                   }	
    		                   channel.disconnect();
    		                   session.disconnect();	
    		             	} catch (Exception e) {		
    		             		e.printStackTrace();		
    		             	}
     
    		            }           		
    		 }
    Ici je n'arrive a executer qu'une commande. J'ai donc essayé d'utiliser un shell. Lors de l'execution je peux rentrer manuellement dans le prompt les différentes commandes et ça fonctionne. J'aimerai pouvoir passer les commandes à partir de string plutôt que les rentrer à la main.
    Voici mon code avec le shell :
    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
    import java.io.ByteArrayInputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
     
    import javax.swing.JOptionPane;
     
    import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.Session;
    import com.jcraft.jsch.UIKeyboardInteractive;
    import com.jcraft.jsch.UserInfo;
     
    	public class Shell{
    	  public static void main(String[] arg){
    	    String sys = "systeme";
    	    String monPort ="interface gigabitEthernet 1/0/1";
    	    String duplex = "duplex full";
    	    String vlan = "port access vlan 10";
    	    try{
    	      JSch jsch=new JSch();
     	      String user = "user";
    	      String host="adresseIP";
    	      String passwd="password";
    	      Session session=jsch.getSession(user, host, 22);
    	      session.setPassword(passwd);
     
    	      UserInfo ui = new MyUserInfo(){
    	        public void showMessage(String message){
    	          JOptionPane.showMessageDialog(null, message);
    	        }
    	        public boolean promptYesNo(String message){
    	          Object[] options={ "yes", "no" };
    	          int foo=JOptionPane.showOptionDialog(null, 
    	                                               message,
    	                                               "Warning", 
    	                                               JOptionPane.DEFAULT_OPTION, 
    	                                               JOptionPane.WARNING_MESSAGE,
    	                                               null, options, options[0]);
    	          return foo==0;
    	        }
    	      };
     
    	      session.setUserInfo(ui);
    	      session.connect(30000);   
    	      Channel channel=session.openChannel("shell");
    	      channel.setInputStream(System.in);
    	      channel.setOutputStream(System.out);
    	      channel.connect(3*1000);
    	      InputStream in = new ByteArrayInputStream(sys.getBytes()); 
     	    }
    	    catch(Exception e){
    	      System.out.println(e);
    	    }
    	  }
     
    	  public static abstract class MyUserInfo
    	                          implements UserInfo, UIKeyboardInteractive{
    	    public String getPassword(){ return null; }
    	    public boolean promptYesNo(String str){ return false; }
    	    public String getPassphrase(){ return null; }
    	    public boolean promptPassphrase(String message){ return false; }
    	    public boolean promptPassword(String message){ return false; }
    	    public void showMessage(String message){ }
    	    public String[] promptKeyboardInteractive(String destination,
    	                                              String name,
    	                                              String instruction,
    	                                              String[] prompt,
    	                                              boolean[] echo){
    	      return null;
    	    }
    	  }
    	}
    Si quelqu'un pouvait m'aider ou me guider. J'ai parcouru beaucoup de forum et les réponses apportées sur l'execution de plusieurs commandes n'étaient pas adaptés ou ne fonctionnaient pas.

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Ne serait-il pas plus aisé de faire un script shell unix (bash, ksh, ... celui que tu préfères) puis de l'interfacer avec ton programme Java ?
    Tu n'aurais plus à gérer tout ça en Java. Le code Java serait plus simple et le shell unix serait lisible et facilement maintenable. En plus, les paramètres du shell unix seraient maintenu par toi, tu pourrais faire tout ce que tu veux.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    En fait mon application récupère les paramètre d'un port et je dois pouvoir modifier le vlan, la description, la vitesse du port et ceci via une application web. Il est donc difficile de faire un script puisque les paramètres ne seront jamais les memes selon les ports à modifier.

    C'est peut être un peu évasif comme description ?

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Tu parviens à faire un programme en Java : il suffirait de déporter les commandes dans un script en ajoutant des paramètres.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je vois pas trop comment faire. Executer un script dans une session ssh je vois pas trop comment faire. Peux tu m'indiquer comment faire stp ?

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh user@machine "ls; cd mon_rep; ls"
    En supposant bien entendu que la machine distante tourne sous Unix.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    La machine distante est un switch 3COM, c'est pour ça que c'est un peu particulier et que je galère. Je peux passer qu'une commande une à une :s

Discussions similaires

  1. Exécuter plusieurs commandes avec ShellExecute
    Par Kimish dans le forum Windows
    Réponses: 4
    Dernier message: 23/02/2009, 17h48
  2. Réponses: 10
    Dernier message: 03/04/2008, 15h58
  3. exécuter une commande avec ShellExecute
    Par LN(a) dans le forum Delphi
    Réponses: 2
    Dernier message: 08/06/2007, 16h34
  4. Exécuter plusieurs commandes bat
    Par n@n¤u dans le forum Langage
    Réponses: 4
    Dernier message: 31/08/2006, 15h23
  5. Plusieurs commandes avec 1 seule R-commande
    Par pouldo dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 01/04/2005, 18h44

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