Dans mon projet, je dispose d'un fichier de classe Java, à l'intérieur dont j'ai une routine qui exécute le fichier script SFTP externe suivant:Connexion au service SFTP via Java processus d'exécution
#!/bin/sh
echo "cd AV/OASIS" >> sftp
echo "put $1 $2" >> sftp
echo "get AV/OASIS/$2 $3$2" >> sftp
echo "bye" >> sftp
/usr/local/bin/sftp -b sftp [email protected]
cat /dev/null > sftp
exit 0
Le code Java qui exécute le fichier script est comme ci-dessous:
String script = "full path of script";
Process p = Runtime.getRuntime().exec(script + " " + param1 + " " + param2 + " " + param3);
Cependant, je ne sais pas pourquoi, mais le journal généré par le fichier de classe montre toujours l'erreur « vérification de la clé hôte Échec de la connexion fermée.. »
J'avais isolé cette ligne dans le script qui connecté à la machine à distance, et a couru sur la machine locale (où ce fichier de classe et le fichier de script sont stockés), et la commande exécutée avec succès
Je aurait exécuter manuellement la commande que le fichier de classe Java exécutera et il a également testé correct:
$ script.sh param1 param2 param3
j'avais essayé de regarder le message d'erreur sur l'Internet, et apparemment, il semble avoir quelque chose à voir avec known_hosts. Serait-ce la raison, ou y a-t-il autre chose qui me manque?
Merci beaucoup!
Salut Tom, merci pour votre réponse. "La raison pour laquelle la clé de l'hôte ne parvient pas à vérifier sur une machine et pas sur une autre est parce qu'une machine se sera connectée avant et une autre non." Je ne sais pas si j'ai bien compris, mais j'ai exécuté la commande sur la machine sur laquelle la classe Java est stockée, et le script pourrait s'exécuter. Puisque la classe Java exécute exactement la même commande sur la même machine, ne devrait-elle pas avoir les mêmes privilèges? En ce qui concerne votre note de côté, je voudrais vraiment pouvoir l'utiliser, mais mes mains sont liées en ce qui concerne les changements de code, donc je suis en train de faire avec l'existant. – ohseekay