Comment exécuter la commande dos "ssh" en Java?

ptitpatatou Messages postés 3 Date d'inscription jeudi 1 décembre 2005 Statut Membre Dernière intervention 2 décembre 2005 - 1 déc. 2005 à 19:54
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 2 déc. 2005 à 14:21
Slt à tous,
Je cherche à faire un programme qui me permettrait de me connecter à un serveur grâce à la commande ssh lancée sous dos. Le problème c'est que le code suivant marche avec command "ipconfig" mais pas si command "ssh admin@192.168.10.1". Est ce que quelqu'un pourait m'expliquer pourquoi et comment faire pour récupérer ce qui s'affiche sous dos dans une fenêtre java?

Process process = Runtime.getRuntime().exec(command);
InputStream in = process.getInputStream();
InputStream err = process.getErrorStream();

byte buffer[] = new byte[1024];
int available = 0;


do{


available = err.available();
if( available > 0 ) {
err.read(buffer,0,available);
String phrase = new String(buffer);
System.out.print("Read1 "+available+" characters: ");


for( int i=0; i 0 ) {
in.read(buffer,0,available);
String phrase = new String(buffer);
System.out.print("Read2 "+available+" characters: ");


for( int i=0; i<available; i++ )
System.out.print(buffer[i]);


System.out.println();
System.out.println(phrase);
System.out.println();


}


}while (true);
}

6 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
1 déc. 2005 à 22:34
Salut,

tu peux essayer ça :



Runtime r = Runtime.getRuntime();

try {

Process p= r.exec(commande);
catch (IOException ioe) {

System.err.println("erreur");

}

InputStream outStream = p.getInputStream();

BufferedReader buf = new BufferedReader(new InputStreamReader(outStream));

String ligne = "";

StringBuffer chaine = new StringBuffer();

try {

while ((ligne=buf.readLine())!=null){

chaine.append(ligne);

chaine.append("\n");

}

}catch (IOException e1) {

System.err.println("erreur");

}

System.out.println(chaine);





j'ai pas essayé avec ssh mais avec mplayer et toute les commandes de base de linux


WORA
0
ptitpatatou Messages postés 3 Date d'inscription jeudi 1 décembre 2005 Statut Membre Dernière intervention 2 décembre 2005
1 déc. 2005 à 23:10
Merci de m'avoir répondu.
En faite ce que tu as mis c'est ce que j'avais essayé au début. Seulement ce programme bloque à la commande buf.readline().
En faite je pense que la réponse envoyé à la commande ssh ne comprend pas de caractère \n ou \r. Du coup la commande readline() attend un \n ou \r et le programme ne se déroule plus. On a le même comportement si on utilise la commande ftp à la place de ssh.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
2 déc. 2005 à 09:33
Salut,





c'est normal que buf.readline() bloque



enfaite il le fait pour de raison

1- si tu le fait pour la premiere fois sur admin@192.168.10.1 ssh attend yes ou no pour généré la clée de cryptage

2- ssh attendra toujours(sauf apres création du fichier known_hosts) le mot de passe de l'utilisateur


WORA
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
2 déc. 2005 à 09:34
pour info buf.readline() ne fait que lire le retour de la commande donc
les \n ou \r n'ont rien avoir avec ssh ou une autre commande




WORA
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ptitpatatou Messages postés 3 Date d'inscription jeudi 1 décembre 2005 Statut Membre Dernière intervention 2 décembre 2005
2 déc. 2005 à 12:40
D'accord, mais du coup comment est ce que je peux faire afficher en java la réponse dos qui m'invite à saisir mon mot de passe?
En effet, j'en ai besoin car mon but final est de me connecter entièrement à partir d'une fenetre Java.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
2 déc. 2005 à 14:21
tu peux :



-utiliser les methodes getInputStream() et getOutputStream() de la classe Proccess pour lire et écrire les données de ssh.



- utiliser une api

(dispo sur google ref:
http://www.google.fr/search?hs=PlU&hl=fr&client=firefox&rls=org.mozilla%3Afr%3Aunofficial&q=java+ssh+%2Bapi&btnG=Rechercher&meta=

).



- créer une socket secure pour lire et écrire tes données sans passer par ssh ............






WORA
0
Rejoignez-nous