Bonjour à vous,
je souhaite que mon programme envoie des commandes via SSH à mon serveur.
Pour ça j'utilise la librairie Jsch avec l'exemple suivant que j'ai modifié à ma sauce pour que je puisse me connecter en rentrant juste mon mot de passe.
Jusque là tout va bien, je peux naviguer sur mon serveur dans la console puisque l'entrée et la sortie sont gérées:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
Mais je voudrais mettre mon propre InputStream pour envoyer les commandes que je veux au shell.
Donc j'ai fait ma classe:
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
 
public class InputStreamSSH extends InputStream{
 
	private volatile String input;
 
	public InputStreamSSH(){
		input = new String();
	}
 
	public int available() throws IOException{
		return input.length();
	}
 
	@Override
	public int read() throws IOException {
 
		while(this.available() == 0){
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		int currentByte = input.getBytes()[0];
		input = input.substring(1, input.length());
 
 
		return currentByte;
 
	}
 
	public void write(String str){
		input += str;
	}
 
	public boolean markSupported(){
		return false;
	}
 
 
}
en suivant la doc.
Mais par exemple si j'essaye un "mkdir toast" rien ne se crée sur mon serveur (chemin bien vérifié).
J'ai essayé en ajoutant le retour ligne et fin de ligne pour simuler la touche entrée, mais ça change rien:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
final char CR = 13;
final char FL = 10;
return cmd + CR + FL;
Ma classe InputStream est sûrement mal faîte..
Ou j'ai oublié quelque chose ailleurs ?
J'ai bien mit le
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
channel.setInputStream(myInputStream);
Et pour appeler write(String) de ma classe InputStream j'utilise un autre Thread.
J'ai testé chaque méthode voir ses retours et de ce côté c'est bon.

Merci d'avance de vos réponses, et si y'a une solution qui existe déjà et que j'ai loupé je veux bien la connaître, ou même si j'ai fait une erreur !
Cordialement.