3 votes

Transmettre la valeur au canal System.in

Mon objectif est d'exécuter une commande à distance via un shell ssh. J'ai donc utilisé jsch pour établir une connexion et essayé

Channel channel=session.openChannel("exec");

mais cela ne fonctionne pas avec certaines commandes comme dir.

J'ai donc essayé avec un shell mais je n'ai pas pu transmettre de valeur à System.in, car je dois donner la commande uniquement via une interface graphique

Channel channel=session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);

Dans le code ci-dessus, je dois transmettre une valeur via une chaîne de caractères à partir de l'interface graphique au lieu de System.in.

J'ai donc essayé quelque chose comme

String cmd="help";
InputStream is = new ByteArrayInputStream(cmd.getBytes());
System.setIn(is);
channel.setInputStream(System.in);

Mais même ainsi je n'arrive pas à obtenir de sortie.

0voto

Kenster Points 2837

L'auteur original a fourni cette réponse :

J'ai fait quelques recherches et trouvé la réponse. Je vais la partager ici.

Pour donner une entrée en tant que chaîne de caractères dans le shell ssh, vous pouvez utiliser le code suivant.

Channel channel=session.openChannel("shell");

OutputStream ops = channel.getOutputStream();
PrintStream ps = new PrintStream(ops, true);

channel.connect();
ps.println("ping localhost"); 
ps.close();

InputStream in=channel.getInputStream();
byte[] bt = new byte[1024];

while(true) {
    while(in.available() > 0) {
        int i=in.read(bt, 0, 1024);
        if(i < 0) {
            break;
        }
        String str=new String(bt, 0, i);
        System.out.print(str); //affiche la sortie de la commande exécutée.
    }
    if(channel.isClosed()) {
        break;
    }
    Thread.sleep(1000);
    channel.disconnect();
    session.disconnect();    
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X