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 :

JSch : Problème de variables en environnement Unix


Sujet :

API standards et tierces Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut JSch : Problème de variables en environnement Unix
    Bonjour à tous,

    Je démarre avec JSch 0.1.39 (Sous java 1.4) et rencontre un pb majeur pour moi :

    Lorsque je veux executer un script Shell sur une machine distante en utilisant des variables d'env. (ex: ls $DOSSIER_LOG ), ce dernier ne reconnait pas la var. env.

    Pourtant le user unix utilisé pour la connexion reconnait bien ses variables d'env.

    Avez vous une explication ou une solution ?

    Ci joint mon code de connexion/excution

    Merci d'avance

    Cédric

    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
    /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */
    import java.awt.Container;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.io.InputStream;
    import java.io.PrintStream;
     
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
     
    import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.ChannelExec;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.Session;
    import com.jcraft.jsch.UIKeyboardInteractive;
    import com.jcraft.jsch.UserInfo;
     
    public class ShellExec{
    	  public ShellExec(String command){
        try{
          JSch jsch=new JSch();  
     
          String host="xxxxx";
          Session session=jsch.getSession("user", host, 22);
     
          session.setPassword("yyyyy");
          session.setConfig("StrictHostKeyChecking", "no");
          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);
          System.setOut(new PrintStream(new JTextAreaSystemOut(windowMain3.ShellArea))); 
          channel.setOutputStream(System.out);
     
          //FileOutputStream fos=new FileOutputStream("Y:/temp/stderr.out");
          //((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
          }
        }
      }
    }

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Août 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Config SSH
    j'ai avancé depuis hier..

    en fait, lorque l'on ouvre un channel SSH,
    il ne met en place que certaines variable senv. (ex: $USER), il
    ne lance pas le .profile.

    pour avoir des variables env. supplémentaires, il faudrait:
    - créer le fichier $HOME/.ssh/environment
    - modifier le fichier de config ssh /etc/ssh/sshd_config et modifier le paramètre PermitUserEnvironment à yes

    j'essaie..

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2003
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Config SSH
    Bonjour,

    Je sais que ça fait plus d'un an, que le sujet a été évoqué.
    A tout hasard, as-tu résolu ton problème , ta solution fonctionne-t-elle ?
    Si oui serait-il possible d'avoir plus de détails ? En effet j'ai le même problème.

    Merci d'avance.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/04/2007, 14h03
  2. problème getenv() variables d'environnement
    Par bobo825 dans le forum C
    Réponses: 2
    Dernier message: 10/01/2007, 20h50
  3. Problème de variable d'environnement
    Par yaya0057 dans le forum Langage
    Réponses: 3
    Dernier message: 29/12/2006, 14h49
  4. Problème avec variable d'environnement
    Par beegees dans le forum ASP
    Réponses: 7
    Dernier message: 13/12/2006, 16h29
  5. [Debutant(e)]problème de variable d'environnement
    Par tolsam dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 12/08/2004, 20h08

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