2°) configuration du sudo
Bon là c'est aussi discutable sur un plan de la sécurité mais pour avoir un sudo sans password:
ajouter dans /etc/sudoers de la machine cible "utilisateurbidule ALL=NOPASSWD: ALL"
3°) exécuter un process natif depuis java:
String cmdline= "sh ~/monscript.sh"
// démarre le process
Process p = Runtime.getRuntime().exec(cmdline);
// note: il existe une méthode Process exec(String command, String envp[], File dir)
// mais si tu l'utilises tu devra récupérer manuellement tout le contexte d'exécution (variables PATH/JAVA_HOME...)
// Initie et lance deux threads lisant sortie erreur et standard du process
// Tu peux mettre des FileOutputStream ou System.out/System.err à la place de "null" pour voir ce qui se passe dans le script
Thread stdTh = new InputStreamConsumerThread("STDStream", p.getInputStream(), null);
Thread errTh = new InputStreamConsumerThread("ErrorStream", p.getErrorStream(), null);
errTh.start();
stdTh.start();
# Plusieurs problèmes
Posté par lampapiertramol (site web personnel) . En réponse au message exécuter un script shell à distance avec la classe Runtime. Évalué à 2.
1°) Lancer ta commande à distance avec ssh
#ssh machinecible -l utilisateurbidule "sh ~/monscript.sh"
pour mettre le script sur la cible exécuter avant:
#scp monscript.sh utilisateurbidule@machinecible:~/
pour ne pas avoir à entrer de password: http://www.debian.org/devel/passwordlessssh(...)
2°) configuration du sudo
Bon là c'est aussi discutable sur un plan de la sécurité mais pour avoir un sudo sans password:
ajouter dans /etc/sudoers de la machine cible "utilisateurbidule ALL=NOPASSWD: ALL"
3°) exécuter un process natif depuis java:
Le code de la classe InputStreamConsumerThread: