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

Langage Java Discussion :

Exécution de commande à distance - changement d'utilisateur


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de flutz
    Homme Profil pro
    Ingénieur d'études et développement
    Inscrit en
    Juin 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 52
    Par défaut Exécution de commande à distance - changement d'utilisateur
    Bonjour à tous amis développeurs.

    Je ne sais pas si je suis dans la bonne discussion, ne sachant pas trop dans quelle catégorie est mon problème.

    Pour une application web, je souhaite exécuter des commandes sh sur un serveur distant.

    J'ai cherché différentes façon de faire sur Google et une des façons que j'ai retenu est d'utiliser la librairie ch.ethz.ssh2.
    Après je suis ouvert à d'autres possibilité.

    Donc j'arrive correctement à me connecter avec l'utilisateur principal, mon problème se situe sur le fait que je dois changer ensuite d'utilisateur (il ne m'est pas possible de me connecté directement avec l'utilisateur de travail, je dois obligatoirement me connecter avec un autre utilisateur).

    Donc pour changer d'utilisateur, j'essaie de lancer la commande "su - user" puis de renvoyer une réponse avec le mot de passe, mais j'obtiens l'erreur suivante : "java.io.IOException: SSH channel is closed. (Close requested by remote)"


    Voici mon 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
    try
    		{
    			this.session = this.connection.openSession();
    			log.info("Exécution de la commande : " + cmd);
    			this.session.execCommand(cmd);
    			this.session.getStdin().write(password + "\n".getBytes());
    			InputStream stdout = new StreamGobbler(this.session.getStdout());
     
    			BufferedReader br = new BufferedReader(new InputStreamReader(stdout, this.encoding));
     
    			while (true) {
    				String line = br.readLine();
    				if (line == null) {
    					break;
    				}
    				System.out.println(line);
    				retour.add(line);
    			}
     
    			br.close();
     
    			this.session.close();
    		}
    		catch (IOException e)
    		{
    			log.error(e);
    		}
    Auriez-vous une idée de comment corriger le problème, ou d'utiliser une autre méthode?

    Merci d'avance!

    Nb : sur le serveur à distance il n'y a pas de serveur web, sinon j'aurais directement installé mon application dessus, et je ne peux pas faire d'installations.

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.io.IOException: SSH channel is closed
    a lieu à quelle ligne?

  3. #3
    Membre confirmé Avatar de flutz
    Homme Profil pro
    Ingénieur d'études et développement
    Inscrit en
    Juin 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 52
    Par défaut
    Le problème survient sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.session.getStdin().write(password + "\n".getBytes());

  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
    essaie plutot ceci;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    			this.session.startShell();
    			this.session.getStdin().write(cmd.getBytes());
    			this.session.getStdin().write(password + "\n".getBytes());
    De mémoire, ssh est un chouilla plus compliqué que telnet. Les commande bénéficient de channel spécifique, ainsi executeCmd sera utilisé pour faire par exemple du scp. Il y a aussi un channel dédié à l'interactif, utilisable si tu démarre une shell.

  5. #5
    Membre confirmé Avatar de flutz
    Homme Profil pro
    Ingénieur d'études et développement
    Inscrit en
    Juin 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 52
    Par défaut
    Merci pour ta réponse.

    Je n'ai plus d'erreur mais je n'arrive pas non plus à me connecter et j'ai du mal à obtenir le retour.
    Quand je fais un "echo test" ça me retourne bien test, par contre la saisie du login et du mot de passe apparemment ne renvoi rien (ça bloque sur le br.readLine() lorsque j'utilise le shell même pour echo test, la première boucle est bonne mais ensuite il bloque).

    Du coup j'ai du mal à savoir le problème.

    Par contre si je lance une commande avant, et après (j'ai testé la création d'un fichier), ça me génère bien les 2 fichiers, mais dans le même répertoire racine de l'utilisateur principal et non pas du second ce qui prouve que je n'ai pas réussi à me connecter ).

    Mais sinon s'il y a une autre solution que ssh qui fonctionne je suis preneur:/

  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
    ne change pas le répertoire courant et je ne pense pas non plus que ça change les variables d'environnement comme $HOME.


    pour ta boucle readline, est-ce que, à part ton echo, tu exécute la moindre commande qui produit une sortie??

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

Discussions similaires

  1. [SSH] Exécuter plusieurs commandes à distance
    Par tck-lt dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/04/2011, 17h13
  2. Réponses: 1
    Dernier message: 01/12/2010, 14h12
  3. Exécuter une commande Terminal à distance
    Par parp1 dans le forum Réseau
    Réponses: 12
    Dernier message: 04/02/2007, 15h28
  4. Exécuter une commande linux.
    Par casafa dans le forum Linux
    Réponses: 4
    Dernier message: 20/07/2005, 23h13
  5. Réponses: 2
    Dernier message: 02/11/2004, 06h52

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