2010-03-17 9 views
0

Hey j'ai couru dans le problème suivant lors d'une tentative de construire un programme en Java qui exécute des commandes sur un serveur Linux distant et retourne la sortie pour le traitement ...Envoyer et recevoir plusieurs commandes SSH via Java Runtime et Cygwin

Fondamentalement j'ai installé Cygwin avec un client SSH et que vous souhaitez effectuer les opérations suivantes:

Ouvert Cygwin,

commande Envoyer "ip user @";

Sortie de retour;

Commande d'envoi "mot de passe";

Sortie de retour;

Envoyer plusieurs autres commandes,

Sortie de retour;

... etc ...

Jusqu'à présent:

Process proc = Runtime.getRuntime() exec. ("C:/Power Apps/Cygwin/cygwin.bat");

Fonctionne bien sauf que je ne sais pas comment essayer les prochaines étapes.

Une aide?

Répondre

1

Le moyen le plus rapide: Ne passez pas par cygwin. Transmettez vos informations de connexion et vos commandes en tant qu'arguments à ssh.

Une meilleure façon: Installez et utilisez l'open source et très mature Sun Grid Engine et utilisez sa liaison DRMAA pour Java pour exec vos commandes. Vous pouvez également envisager de passer à un langage de script (vôtre est une tâche très semblable à un script). Si vous avez DRMAA a Perl, Ruby et other bindings ainsi.

1

Vous pouvez également utiliser Plink: Download here

Il y a un bon jeu d'instructions link here

Vous pouvez utiliser une commande comme: racine plink @ myserver -pw passw/etc/sauvegardes/do- backup.sh

+0

Ce serait idéal sauf que je dois me connecter à un moniteur et à partir de là les autres serveurs qui ne permettent pas l'accès externe sur SSH. – Moustachio

1

Utilisez une implémentation SSH dans Java. J'ai utilisé Ganymede il y a quelques années, il y a peut-être de meilleures alternatives maintenant. (?)

En utilisant Ganymede, vous obtiendrez un flux d'entrée à lire et un flux de sortie dans lequel écrire.

Vous pouvez créer un LineInputReader sur le flux d'entrée et l'utiliser pour lire des chaînes représentant la sortie du serveur distant. Utilisez ensuite un pattern/Matcher regexp pour analyser les réponses.

Créez un PrintWriter sur le flux de sortie et utilisez println() pour envoyer vos commandes.

Son simple et en fait assez puissant (si vous savez regexp ... Il faudra peut-être quelques essais et erreurs pour y arriver ...