Appel d'un code linux sous une appli java

Fermé
malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 - 3 sept. 2012 à 13:51
malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 - 3 sept. 2012 à 16:12
Bonjour,
Voilà j'ai un petit soucis,

je voudrais accéder à un serveur Linux distant (dont j'ai les droits d'accès) via un programme Java et après exécuter AUTOMATIQUEMENT des commandes Linux (c'est les commandes que je mets en dur dans le code qui vont être exécutées) comme si j'étais sur le serveur.

La première partie fonctionne parfaitement, j'arrive à me connecter au serveur ...

mais le truc c'est que je n'arrive pas à trouver comment lancer une suite d'instructions sans que moi j'intervienne !!, ce qui se passe actuellement c'est que je me connecte et après le programme attende que moi même je tape les commandes,

Si quelqu'un a une idée, je vous remercie
A voir également:

4 réponses

KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
3 sept. 2012 à 14:17
Si c'est des appels système, tu peux utiliser exec

Exemple :

Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("ls"); // c'est bidon, je sais

Et s'il est nécessaire de récupérer le résultat de la commande :

Scanner out = new Scanner(process.getInputStream());
while (out.hasNextLine())
    System.out.println(out.nextLine());
out.close();

Scanner err = new Scanner(process.getErrorStream());
while (err.hasNextLine())
    System.err.println(out.nextLine());
err.close();
0
malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 32
3 sept. 2012 à 14:32
Slt KX,
je ne sais pas si tu te rappelles de moi, on a partagé une discussion lmors d'un sujet dans forum, bon présentation faite :),

voilà le soucis avec ce que tu m'as donné (que j'ai déjà vu), comment tu précise le serveur cible ?
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
3 sept. 2012 à 14:39
Si c'est une commande Linux ("commandes que je mets en dur dans le code qui vont être exécutées"), j'imagine que le serveur sera lui aussi précisé en dur dans la commande...

Après, ta question relève peut-être plus de comment écrire ta commande système, que de comment l'implémenter en Java !
0
malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 32
Modifié par malaik5 le 3/09/2012 à 14:55
non c'est une implémentation Java,

public static void main(String[] arg){

try{
JSch jsch=new JSch();

//jsch.setKnownHosts("/home/foo/.ssh/known_hosts");

String host=null;
if(arg.length>0){
host=arg[0];
}
else{
host=JOptionPane.showInputDialog("Enter username@hostname",
System.getProperty("user.name")+
"@serveur");
}
String user=host.substring(0, host.indexOf('@'));
host=host.substring(host.indexOf('@')+1);

Session session=jsch.getSession(user, host, 22);

String passwd = JOptionPane.showInputDialog("Pass");
session.setPassword(passwd);

UserInfo ui = new MyUserInfo(){
public void showMessage(String message){
JOptionPane.showMessageDialog(null, message);
}
public boolean promptYesNo(String message){
Object[] options={ "yes", "no" };
int foo=JOptionPane.showOptionDialog(null,
message,
"Warning",
JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE,
null, options, options[0]);
return foo==0;
}
};

session.setUserInfo(ui);
session.connect(30000); // making a connection with timeout.

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

channel.setInputStream(System.in);

channel.setOutputStream(System.out);

channel.connect(3*1000);



}
catch(Exception e){
System.out.println(e);
}
}
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
3 sept. 2012 à 15:07
Bravo ! Tu sais faire un copier-coller...

Mais vu que tu as trouvé le code de l'exemple 1, continue avec les autres !

Mais en quoi ça aide ? Si tu veux faire des appels systèmes en Java, il faut au minimum connaitre les commandes systèmes que tu veux effectuer, si tu veux passer par une bibliothèque comme JSch, alors regarde la documentation... mais ça sert à rien de balancer un code trouvé sur le net qui n'a probablement rien à voir avec ton problème !
0
malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 32
3 sept. 2012 à 16:12
Merci l'intelligent
0