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

  1. #1
    Membre régulier 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 : 37
    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
    Points : 70
    Points
    70
    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.
    Il y a souvent confusion entre les geeks, les nolifes, et les
    nerds.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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 régulier 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 : 37
    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
    Points : 70
    Points
    70
    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());
    Il y a souvent confusion entre les geeks, les nolifes, et les
    nerds.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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 régulier 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 : 37
    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
    Points : 70
    Points
    70
    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:/
    Il y a souvent confusion entre les geeks, les nolifes, et les
    nerds.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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??

  7. #7
    Membre régulier 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 : 37
    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
    Points : 70
    Points
    70
    Par défaut
    Quand je fais su - user directement dans PuTTy ça me met dans le home du user (il me semble que c'est le tiret qui fait ça).

    Non effectivement il n'y a que le echo qui me fait une sortir, mais je trouve bizarre de pas arrivé à catcher le "Password:" qui s'affiche dans les consoles lorsqu'on le fait par exemple dans PuTTy ni d'éventuelles erreurs si la commande n'est pas bonne.

    Edit : je confirme pour le su - user, c'est bien l'option "-" qui redirige dans le home de l'utilisateur.

    Edit 2 : J'ai essayé "id" au lieu de echo pour afficher les informations sur l'utilisateur et je ne récupère rien non plus, ça bloque sur les br.readLine()
    J'avais oublié de remettre les '\n' à la fin de chaque commande...
    Il y a souvent confusion entre les geeks, les nolifes, et les
    nerds.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    les erreur -> vérifie le contenu de getStderr()

  9. #9
    Membre régulier 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 : 37
    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
    Points : 70
    Points
    70
    Par défaut
    Ah merci pour les erreurs!

    Donc lorsque je met "\n" après le su :

    Avec sudo : "sudo: no tty present and no askpass program specified"
    Avec juste su : "Cannot su to "user" : Authentication is denied."

    Si je supprime le "\n", il me met : "User "userpassword" does not exist."

    Edit : Du coup je suppose qu'il faut bien ajouter "\n" à la fin de chaque commande.
    Il y a souvent confusion entre les geeks, les nolifes, et les
    nerds.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pas de tty, ça veux dire que tes application n'ont pas de terminal accessible (ce qui est logique puisque tu pipe tout dans stdin/out/err). Or sudo et su requirent un tty exclusivement pour le pass (refusent de le lire depuis stdin)

    appelle Session.requestPTY() avant l'appel à startShell pour avoir un terminal.

    voir cette question:
    http://www.ganymed.ethz.ch/ssh2/FAQ.html#env

  11. #11
    Membre régulier 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 : 37
    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
    Points : 70
    Points
    70
    Par défaut
    Oui j'avais vu un post là-dessus aussi.

    Par contre j'ai bien peu que ça ne résolve pas mon problème puisque je ne peux pas ouvrir de terminal (et c'est d'ailleurs le but, d'automatiser la connexion...)
    Il y a souvent confusion entre les geeks, les nolifes, et les
    nerds.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ne confond pas le terminal (chose visuel) et le terminal (chose faisant partie du protocole ssh). L'appel à requestPTY n'affiche normalement rien, ça sert juste à négocier avec la partie de l'autre coté pour lui dire "tiens, au fait, y a un tty"

  13. #13
    Membre régulier 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 : 37
    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
    Points : 70
    Points
    70
    Par défaut
    Effectivement, après différent tests en débug j'ai finalement réussi!

    Mais en fait en plus il faut lui laisser un temps de pause entre la saisie du su et la saisie du mot de passe.

    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
     
    // Création de la session à partir de la connexion
    this.session = this.connection.openSession();
    // On précise qu'il y a un pseudo terminal
    this.session.requestPTY("vt100");
    // On démarre le shell
    this.session.startShell();
    // On créé un fichier avec l'utilisateur courant
    this.session.getStdin().write("touch testAvant\n".getBytes());
    Thread.currentThread();
    Thread.sleep(100);
    // On fait un sudo pour changer l'utilisateur
    this.session.getStdin().write("sudo su - user\n".getBytes());
    Thread.currentThread();
    Thread.sleep(100);
    // On saisie le mot de passe
    this.session.getStdin().write(("password\n").getBytes());
    Thread.currentThread();
    Thread.sleep(100);
    // On créé un fichier avec le nouvel utilisateur
    this.session.getStdin().write(("touch testApres\n").getBytes());
    // On ferme la session
    this.session.close();
    Bon plus qu'à rendre tout ça au propre et apparemment j'utilise mal le sleep d'après Eclipse, mais ça fonctionne!

    Merci beaucoup pour ton aide
    Il y a souvent confusion entre les geeks, les nolifes, et les
    nerds.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu peux scanner en parallele le stdout pour repérer les shell.

    Il existe aussi un commande bash pour changer le prompt. Ca peux t'être utile pour y mettre un marqueur facile à reconnaire

  15. #15
    Membre régulier 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 : 37
    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
    Points : 70
    Points
    70
    Par défaut
    Pour le prompt étant donné que l'utilisateur est utilisé par plusieurs personnes physiques, je vais éviter de le modifier.

    Je pense faire plus propre en développant ce que je veux faire directement en ksh, et appeler le ksh via cette API, je pense que ce sera plus propre et je pourrais facilement m'envoyer une valeur de retour pour savoir si le traitement est terminé, ou déposé un flag quelque part.

    Pour le scan en parallèle je l'utiliserais peut-être pour les 2-3 commandes à lancer par session tout de même si c'est plus propre que de faire des sleeps.

    En tout cas merci de ton aide

    Edit :
    Effectivement il est très pratique d'avoir un thread en parallèle pour écouter le retour, car je ne pensais pas au début qu'il fallait tout exécuter dans la même session et donc dans ce cas l'écoute est obligatoire.
    A voir même si un second thread pour écouter le canal d'erreur peut être pratique.

    Merci beaucoup!
    Il y a souvent confusion entre les geeks, les nolifes, et les
    nerds.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par flutz Voir le message
    Pour le prompt étant donné que l'utilisateur est utilisé par plusieurs personnes physiques, je vais éviter de le modifier.
    C'est propre à chaque instance de bash car régit par des variables d'environnement, donc pas un problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    user@server:/tmp$ bash  // on lance bash numéro 2
    user@server:/tmp$ export PS1="ready:\n"
    ready:
    bash // on lance bash numéro 3
    user@server:/tmp$ exit  // on sort de bash numéro 3
    exit
    ready:  // retour au prompt de bash numéro 2
    exit  // on sort de bash 2
    exit
    user@server:/tmp$ // retour au prompt de bash 1

    Je pense faire plus propre en développant ce que je veux faire directement en ksh, et appeler le ksh via cette API, je pense que ce sera plus propre et je pourrais facilement m'envoyer une valeur de retour pour savoir si le traitement est terminé, ou déposé un flag quelque part.
    Tu peux même injecter dynamiquement ton programme, ce qui t'évitera d'avoir à maintenir les deux cotés du tuyaux


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    user@server:/tmp$ read -d '' Program <<THIS_IS_THE_END
    > echo hello world
    > THIS_IS_THE_END
    user@server:/tmp$ $Program
    hello world
    user@server:/tmp$

  17. #17
    Membre régulier 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 : 37
    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
    Points : 70
    Points
    70
    Par défaut
    Pour savoir si le programme est terminé, j'ai ajouté un echo après comme ils mettent dans http://www.ganymed.ethz.ch/ssh2/FAQ.html.

    Comme ça je suis sur que le programme est terminé lorsque j'ai le retour de mon echo

    Tu entends quoi par injecter dynamiquement mon programme, avoir le ksh côté serveur web?
    Du coup je lirais les ksh en local et je les envois sur le serveur?

    Je n'ai pas l'option -d pour la commande read sur le serveur
    Il y a souvent confusion entre les geeks, les nolifes, et les
    nerds.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par flutz Voir le message

    Tu entends quoi par injecter dynamiquement mon programme,?
    Que ton client ssh, la première chose qu'il ferait, c'est créer (en utilisant par exemple echo ou, comme je l'ai montré, read) le fichier .ksh qu'il va utiliser pour interagir avec le serveur. C'est une technique qu'utilise par exemple gnome avec son protocole fish

    Mais bon, c'est juste la cerise finale ^^

  19. #19
    Membre régulier 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 : 37
    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
    Points : 70
    Points
    70
    Par défaut
    Effectivement ça peut être sympa.

    Par contre dans mon cas je ne pense pas que ce soit très avantageux car les utilisateurs vont pouvoir modifier le sh mais connaissent rien à Java, donc au final je préfèrerais leur laisser la possibilité de modifier le sh (ils s'y connaissent d'ailleurs beaucoup plus que moi).

    Actuellement ils font tout à la main, et font essentiellement du sh.
    Le problème c'est que c'est complexe, pas facile à un non expérimenté de toucher à tout ça, en risquant en plus de faire des fautes, et ils font beaucoup de choses répétitives et facilement automatisables.

    Le but est de simplifier la méthode de lancement d'un traitement (en recette, pré production et production), d'automatiser un certains nombre de tâches afin aussi de gagner du temps, et d'avoir un suivi des traitements plus facile.

    Ainsi on aurait un gain en productivité, et surtout une simplicité d'utilisation

    En tout cas merci beaucoup à toi pour ton retour
    Il y a souvent confusion entre les geeks, les nolifes, et les
    nerds.

+ 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