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 :

[J2SSH] Channel'In/Out'putStream problème


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Par défaut [J2SSH] Channel'In/Out'putStream problème
    Bonjour,

    Actuellement, je développe un programme permettant de se connecter en SSH à un serveur sous linux, arrivé sur ce serveur, je veux lui envoyer des commandes. Le problème c'est que je n'arrive pas utiliser la fonction write()
    ChannelOutpuStream : Lien Doc ChannelOutputStream
    ChannelInputStream : Lien Doc ChannelInputStream

    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
     
    public static void run() throws IOException
    	{
    		ConfigurationLoader.initialize(false);
    		String hostname = JOptionPane.showInputDialog("Quelle est le host ?");
    		String username = JOptionPane.showInputDialog("Quelle est le username ?");
    		String password = JOptionPane.showInputDialog("Quelle est le password ?");
     
    		System.out.println("Host : " + hostname + " Username : " + username + " Password : " + password);
     
    		SshClient ssh = new SshClient();
     
    		IgnoreHostKeyVerification verif = new IgnoreHostKeyVerification();
    		ssh.connect(hostname, verif);
     
    		PasswordAuthenticationClient pwd = new PasswordAuthenticationClient();
    		pwd.setUsername(username);
    		pwd.setPassword(password);
     
    		int result = ssh.authenticate(pwd);
     
    		if(result == AuthenticationProtocolState.COMPLETE)
    		{
    			System.out.println("sa marche");
    			ForwardingIOChannel channel = new ForwardingIOChannel(ForwardingIOChannel.LOCAL_FORWARDING_CHANNEL,"tarantella","***.***.***.***",22,"myhost",22);
     
    			if(ssh.openChannel(channel))
    			{
    				System.out.println("truc");
    				ChannelOutputStream out = channel.getOutputStream();
    				ChannelInputStream in = channel.getInputStream();
    				String commandeSSH = "ssh smtp01.msg.oleane.net";
    				byte[] tabCommandeSSH = commandeSSH.getBytes();
     
    				out.write(tabCommandeSSH);
                                    System.out.println(in.read());
    			}
    			else 
    				System.out.println("Channel pas ouvert");
     
     
    		}
     
    	}
    Donc je traduis une ligne de commande en tableau de bytes et je l'envoie, et ensuite je lis ce que le serveur envoie, et lui renvoie des int :s pas évident à lire


    Qu'en pensez vous ?

  2. #2
    Nouveau membre du Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Par défaut
    Up !


    Après quelque tests, j'essaye de faire des commandes, et de récupérer ensuite ce que InputStream recoit, mais le problème c'est qu'il s'arrete, je ne sais pas pourquoi :s

    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
    String [] commande = {"ssh " + pool, pass, "telnet " + hostClient + " " + portTelnet, "helo " + helo, "mail from: " + from, "rcpt to: " + to, "data", "Ceci est un mail test de Orange Business Service, merci de ne pas en tenir compte.", ".", "quit"};
     
     
    				System.out.println("channel ouvert");
    				ChannelOutputStream out = channel.getOutputStream();
    				ChannelInputStream in = channel.getInputStream();
     
    				for(int i = 0; i <commande.length; i++)
    				{
    					System.out.println(commande[i]);
    					byte[] requete = commande[i].getBytes();
    					out.write(requete);
    					while(in.read() != -1){
     
    						System.out.println(in.read());}
    					System.out.println("i = " + i);
    				}
     
     
    				channel.close();

    Et voila ce que je recoit comme réponse, je n'ai meme pas le dernier System.out.println, il ne fait que la premiere instruction ! Pourquoi ?

    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 nov. 2010 11:04:49 com.sshtools.j2ssh.transport.AsyncService onStart
    INFO: Starting ssh-connection service thread
    authentifation réussie
    19 nov. 2010 11:04:49 com.sshtools.j2ssh.connection.ConnectionProtocol openChannel
    INFO: Channel 0 is open [tarantella]
    channel ouvert
    ssh smtp01.msg.oleane.net
    83
    45
    46
    57
    79
    101
    83
    72
    50
    57
    50

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Par défaut
    J'ai donc continuer mes recherches, le problème vient de la boucle pour lire InputStream, je ne sais pas pourquoi, mais mon programme plante à la fin de la boucle :s

    Il y a aussi le fait que la in.read() renvoie des int, ce n'est pas possible d'avoir quelque chose qui renvoie des String, ou des char ?

    Quelqu'un peut m'aider à régler le problème ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Par défaut
    Up encore ...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Par défaut
    Bon je continue mon monologue, en disant que j'avance un peu mais très lentement et que donc j'ai besoin d'aide !

    Voici mon nouveau 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
    String [] commande = {"ssh " + pool, pass, "telnet " + hostClient + " 25", "helo " + helo, "mail from: " + from, "rcpt to: " + to, "data", "Ceci est un mail test de Orange Business Service, merci de ne pas en tenir compte.", ".", "quit"};
    				System.out.println("channel ouvert");
     
    				Socket sconx;
    				String response;
     
    				InetAddress ourselves;
     
    				try
    				{
    					ourselves = InetAddress.getLocalHost();
    				}catch(UnknownHostException uhe){System.out.println("Erreur InetAddress");}
     
    				BufferedReader in;
    				OutputStreamWriter out;
     
    				try {
    					Thread.sleep(3000);
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
     
    				Interface.Jbody.setText("");
     
    				try{
    					sconx = new Socket(hostTarantel, 22);
    					if(sconx == null)
    						System.out.println("Socket echoué");
     
    					in = new BufferedReader(new InputStreamReader(sconx.getInputStream()));
    					out = new OutputStreamWriter(sconx.getOutputStream());
    					if(in == null || out == null)
    						System.out.println("Flux échoué");
     
    					trace(response = in.readLine());
    					if(!response.startsWith("220"))
    						System.out.println("Serveur invalide");
     
    					String command;
     
    					command = commande[0]; //ssh
    				      out.write(command + "\r\n");
    				      out.flush();
    				      trace(command);
    				      trace(response = in.readLine());
     
                                          sconx.close();
    				      sconx = null;
     
    				}catch(IOException ioe) {System.out.println("Erreur Exception IO");}

    trace() est une fonction qui affiche le string dans un Jtextarea
    Donc j'ouvre un socket sur le port 25, mais il me sort une IOException ? Pourquoi ?
    J'ai essayer de le mettre sur le port 22, mais il me dit cette fois ci que le serveur n'est pas disponible ...

Discussions similaires

  1. In/out putStreams (bytearray, piped, image)
    Par ghetolay dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 18/12/2009, 12h35
  2. Problème de timed out
    Par benassis dans le forum Langage
    Réponses: 8
    Dernier message: 17/08/2006, 16h08
  3. Problème de time-out avec un socket client.
    Par Depteam1 dans le forum MFC
    Réponses: 3
    Dernier message: 17/10/2005, 10h30
  4. [JSTL] [EL] Problème utilisation <c:out>
    Par XavierL dans le forum Taglibs
    Réponses: 7
    Dernier message: 14/08/2005, 20h12
  5. [Linux]Problème System.out.println + compiler
    Par Dnx dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 21/09/2004, 22h05

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