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

avec Java Discussion :

Programme pour établir une connexion ssh avec un serveur sur unix


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut Programme pour établir une connexion ssh avec un serveur sur unix
    bien chers lecteurs,

    je viens ici implorer l'aide de toute personne s'y connaissant bien en java.

    1)je dois ecrire un programme contenant GUI programme ouvrant une fenetre ou est marque: le nom du serveur: , le nom du fichier: (fichier auquel je veux acceder), le nom d utilisateur (User, le passwort: .
    2)A partir de ces données là en cliquant sur start, je dois me connecter par ssh avec le user et le passwort entrés au serveur.

    Jai dejà fais la premiere etape 1) et cest la seconde etape 2) que je n'arrive pas encore ou du moins j ai pas trop d'idées sur où commencer. Apparement je dois utiliser la bibliotheque Mindterm API ...

    Merci de bien vouloir maider et ci joint, le code que jai deja redigé:
    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
     
    import java.awt.Dimension;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
     
     
    public class Test extends JFrame {
     
        /**
         * @param args
         */
     
        final static int width = 400;
        final static int length = 400;
     
     
        public Test () {
            setTitle("Erste Gui Fenster");
            setSize (width, length);
            GridBagLayout layout = new GridBagLayout();
     
            setLayout(new GridBagLayout());
     
            JPanel pnl = new JPanel(layout);
     
     
            GridBagConstraints cons = new GridBagConstraints();
            cons.gridx =1;
            cons.gridy =2;
            cons.anchor = GridBagConstraints.LINE_END;
            JButton start = new JButton("start");
            getContentPane().add(start,cons);
     
            GridBagConstraints c = new GridBagConstraints();
            JLabel texte1 = new JLabel("Servername:");
            c.anchor = GridBagConstraints.LINE_START;
            c.gridx = 1;
            c.gridy = 1;
            pnl.add(texte1, c);
            JLabel texte2 = new JLabel("Rechnerprogramme:");
            c.gridy = 2;
            pnl.add(texte2, c);
            JLabel texte3 = new JLabel("User:");
            c.gridy = 3;
            pnl.add(texte3, c);
            JLabel texte4 = new JLabel("Passwort:");
            c.gridy = 4;
            pnl.add(texte4, c);
     
     
     
     
     
            JTextField eingabe1 = new JTextField();
            eingabe1.setPreferredSize(new Dimension(200,20));
            c.gridx = 2;
            c.gridy = 1;
            pnl.add(eingabe1,c);
            JTextField eingabe2 = new JTextField();
            eingabe2.setPreferredSize(new Dimension(200,20));
            c.gridy = 2;
            pnl.add(eingabe2, c);
            JTextField eingabe3 = new JTextField();
            eingabe3.setPreferredSize(new Dimension(200,20));
            c.gridy = 3;
            pnl.add(eingabe3, c);
            JPasswordField passwordField = new JPasswordField();
            passwordField.setPreferredSize(new Dimension(200,20));
            c.gridy = 4;
            pnl.add(passwordField, c);
     
            setVisible(true);
            cons.gridy = 1;
            cons.anchor = GridBagConstraints.LINE_START;
            getContentPane().add(pnl,cons);
     
     
     
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            new Test();
     
        }
     
    }

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    Personnellement, j'ai utilisé jsch pour me connecter en ssh sur une machine via java et cela fonctionne super bien .

    Un exemple :
    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
     
    ...
    JSch jsch = new JSch();
    session = jsch.getSession("Le user", "la machine", 22);
    session.setPassword("mot de passe");
    session.setConfig(config);
    session.connect();
    Channel channel = session.openChannel("exec"); // il y a d'autres façons de se connecter (autre que exec)
    ((ChannelExec) channel).setCommand(command);
    ((ChannelExec) channel).setPty(true);
    ((ChannelExec) channel).setErrStream(stream);
    channel.setInputStream(in, true);
    channel.setOutputStream(out, true);
    channel.connect();
    ...

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut merci pour cette aide ...
    merci dejà pour l'exemple...

    je vais de ce pas essayer ainsi et je verrai si ca va fonctionner.
    Je reviens dans quelques minutes sur le site faire des retours...

    Sinon ils aimeraient bien ici que j utilise Mindterm API documentation...
    quelqu un a t il une idee?

    Merci d'avance.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut pb resolu mais maitenant jai un pb avec Cronjobs
    bonjour,

    jai un probleme avec crontab.
    a travers une fenetre Gui coe indique plus haut, je fais entrer des parametres tels que nom du serveur, nom d utilisateur , mot de passe et la commande et en cliquant sur start je dois parvenir `a obtenir des resultats dans le cadre reserve au resultat dans ma fenetre GUI.
    Jusqu ici ttes les autres commandes marchent.

    J ai par contre un probleme avec crontab. Par exemple je veux demander de creer ttes les 5 minutes le fichier sandrine.txt.
    Pour cela je fais "*/5 * * * *" touch sandrine.txt > commandfile.txt et je clique sur start
    ensuite je fais crontab commandfile.txt et je clique sur start.
    Alirs quand je veux verifier que le fichier sandrine.txt est bien creer, je fais ls sandrine.txt
    je vois juste une seule fois le fichier sandrine.txt pourquoi jene le vois pas plusieurs fois puisque jai demande de me creer ce fichier la ttes les 5 minutes?

    Merci de m aider `a resoudre le probleme.

    jappelle la commande `a etre executer dans mon programme avec cette partie du code:

    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
    public void executeCommand(String cmdLine) {
            /*
                 * Create the remote console to use for command execution. Here we
                 * redirect stderr of all sessions started with this console to our
                 * own stderr (NOTE: stdout is NOT redirected here but is instead
                 * fetched below).
                 */
     
     
                SSH2ConsoleRemote console =
                    new SSH2ConsoleRemote(client.getConnection(), null, fehler);
     
     
                @SuppressWarnings("unused")
    			int exitStatus = -1;
     
                /*
                 * Run the command. Here we don't redirect stdout and
                 * stderr but use the internal streams of the session channel
                 * instead.
                 */
     
                if (console.command(cmdLine)) {
                	exitStatus = console.waitForExitStatus();
                	texte.add(fehler.toString());
     
                	InputStreamReader stdin= new InputStreamReader(console.getStdOut());
                    /*
                     * Fetch the internal stdout stream and wrap it in a
                     * BufferedReader for convenience.
                     */
     
     
                		BufferedReader stdout = new BufferedReader(stdin);
                    //System.out.println(""+console.command(cmdLine));
     
                    /*
                     * Read all output sent to stdout (line by line) and
                     * print it to our own stdout.
                     */
                    String line;
                try {
     
                    while((line = stdout.readLine()) != null) {
                        //System.out.println(line);
                        //strMessage += "\n"+line; 
                    	texte.add("\n"+line);
                    }
     
                } catch (IOException ex) {
                    Logger.getLogger(SSH2Connection.class.getName()).log(Level.SEVERE, null, ex);
                    texte.add(ex.toString());
                } 
     
                } 
     
                }
    que faut il que je modifie dans ce code pour que le crontab fonctionne exactement ou bien faut t il creer une autre classe cronjobs en s inspirant de ce manuel ci?
    http://www.sauronsoftware.it/projects/cron4j/manual.php

  5. #5
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par sanaline Voir le message
    Pour cela je fais "*/5 * * * *" touch sandrine.txt > commandfile.txt et je clique sur start
    ensuite je fais crontab commandfile.txt et je clique sur start.
    Alirs quand je veux verifier que le fichier sandrine.txt est bien creer, je fais ls sandrine.txt
    je vois juste une seule fois le fichier sandrine.txt pourquoi jene le vois pas plusieurs fois puisque jai demande de me creer ce fichier la ttes les 5 minutes?
    La commande touch ne crée un fichier que s'il n'existe pas, sinon elle change la date de dernière modification (c'est une édition qui ne change rien). D'ailleurs comment voudrais-tu avoir plusieurs fois le même fichier au même endroit ?

  6. #6
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 10
    Points
    10
    Par défaut Merci de votre aide
    Merci jai bien relu ce que la commande touch fait ...effectivement le cronjobs fonctionne...
    Maintenant il me faut y ajouter des threads pour pouvoir: lorsque je donne une commande (e lancer un programme apres 5 minutes ou..) au serveur et qu'ensuite je ferme la fenetre Gui et ensuite que je la reouvre et me reconnecte au serveur, que je puisse obtenir le status actuel de ma precedente commande ( du genre ps encore termine son execution ou execution termine).

    Pouvez me dire comment proceder???

    normallement voici la classe avec laquelle je lancais mon programme:

    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
    /*
     * SSHSteuerungApp.java
     */
     
    package sshsteuerung;
     
    import org.jdesktop.application.Application;
    import org.jdesktop.application.SingleFrameApplication;
    import sshsteuerung.Steuerung.Steuerung;
    import sshsteuerung.daten.Benutzer;
     
    /**
     * The main class of the application.
     */
    public class SSHSteuerungApp extends SingleFrameApplication {
     
        /**
         * At startup create and show the main frame of the application.
         */
        @Override protected void startup() {
     
            Benutzer      model      = new Benutzer();
            SSHGUIView    view       = new SSHGUIView(this,model);
            @SuppressWarnings("unused")
    		Steuerung controller = new Steuerung(model, view);
            show(view); 
            //show(new SSHSteuerungView(this));
        }
     
        /**
         * This method is to initialize the specified window by injecting resources.
         * Windows shown in our application come fully initialized from the GUI
         * builder, so this additional configuration is not needed.
         */
        @Override protected void configureWindow(java.awt.Window root) {
        }
     
        /**
         * A convenient static getter for the application instance.
         * @return the instance of SSHSteuerungApp
         */
        public static SSHSteuerungApp getApplication() {
            return Application.getInstance(SSHSteuerungApp.class);
        }
     
        /**
         * Main method launching the application.
         */
        public static void main(String[] args) {
            launch(SSHSteuerungApp.class, args);
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. manipulation d'un fichier xml pour établir une connexion avec une BD SQL Server
    Par marwacom dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 31/03/2011, 17h36
  2. Réponses: 1
    Dernier message: 31/05/2010, 18h31
  3. Programme pour faire une connexion Http (HttpURLConnection)
    Par zakaria87 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 14/05/2010, 01h25
  4. [MySQL] Quelle fonction pour établir une connexion aléatoire entre 2 membres ?
    Par geekforever dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/03/2010, 11h45
  5. Réponses: 0
    Dernier message: 07/10/2007, 11h24

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