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:
Mais je voudrais mettre mon propre InputStream pour envoyer les commandes que je veux au shell.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 channel.setInputStream(System.in); channel.setOutputStream(System.out);
Donc j'ai fait ma classe:
en suivant la doc.
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; } }
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:
Ma classe InputStream est sûrement mal faîte..
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;
Ou j'ai oublié quelque chose ailleurs ?
J'ai bien mit le
Et pour appeler write(String) de ma classe InputStream j'utilise un autre Thread.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 channel.setInputStream(myInputStream);
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.
Partager