Commandes en cours d'exécution sur ssh avec Java
Scenerio: j'aimerais exécuter des commandes sur des machines distantes à partir d'un programme Java sur ssh (je l'utilise OpenSSH sur ma machine de développement). J'aimerais aussi faire la connexion ssh en passant le mot de passe plutôt que de configurer les touches comme je le ferais avec "prévoir".
Problème: Lorsque vous essayez de faire le "prévoir" comme mot de passe de connexion, le Processus qui s'est créé avec ProcessBuilder n'arrive pas à voir l'invite du mot de passe. Lors de l'exécution régulière de la non-ssh commandes (e.g 'ls') je peux obtenir le flux et d'interagir avec eux très bien. Je suis combinant erreur standard et standard dans un ruisseau avec redirectErrorStream(true);
donc je ne suis pas la rater dans la norme de l'erreur...Quand je lance ssh avec l'option '-v' option, je vois tous les journalisation dans le flux, mais je ne vois pas l'invite de commandes. C'est ma première fois d'essayer d'utiliser ProcessBuilder pour quelque chose comme ça. Je sais qu'il serait plus facile à utiliser Python, Perl ou good ol' attendre, mais mon patron veut utiliser ce que nous essayons de revenir (à distance les fichiers journaux et l'exécution de scripts) à l'intérieur d'un programme Java donc je suis un peu coincé.
Merci d'avance pour l'aide!
OriginalL'auteur Ichorus | 2009-02-20
Vous devez vous connecter pour publier un commentaire.
Le message peut seulement être affichées lors de l'
ssh
est connecté à un terminal, ce qui n'est pas dans le cas de Java.Il y a probablement un moyen de fournir le mot de passe sur la ligne de commande dans votre
ssh
application. Qui sera le moyen d'obtenir le passé de l'invite.Alternativement, envisager de connecter directement sur le serveur hôte à partir de code Java natif plutôt que d'exécuter une application externe. Il y a un million de bibliothèques qui va le faire.
Je le recommande paramiko pour java, habilement appelé jaramiko - lag.net/jaramiko . à l'origine, en Python, a été porté à Java. sera plus facile d'utiliser une version de python lorsque patron permet jusqu' 🙂
OriginalL'auteur Jason Cohen
Plutôt qu'à l'aide d'un programme ssh, pourquoi ne pas utiliser un Java ssh bibliothèque:
Sont les deux que j'ai trouvé avec google, ce qui permet d'éviter le problème que openssh va travailler très dur pour empêcher l'entrée d'un mot de passe sur stdin, ce sera l'ouverture du terminal directement. s'attendre a du travailler très dur pour simuler un ats.
OriginalL'auteur Douglas Leeder
plug: voir cette exemple de l'exécution d'une commande via ssh à l'aide de sshj
OriginalL'auteur shikhar
Pourquoi ne pas utiliser un Java client ssh? Cette on est sous licence BSD, et il y a plus de clients répertoriés ici.
OriginalL'auteur Jason Day
Plus de sécurité à l'esprit programmes n'utilisent pas les stdin/stdout pour la capture des mots de passe, ils capturent l'ATS ou l'équivalent de la méthode.
OriginalL'auteur Ryan Graham
J'ai utilisé le trilead client ssh avec beaucoup de succès. J'ai aussi essayé de jsch (un autre java client ssh) et le tunnel de la native client ssh sous linux. Trilead était de loin le meilleur.
OriginalL'auteur
Prendre un coup d'oeil à la très récemment publié SSHD, qui est basé sur Apache MINA projet.
OriginalL'auteur mshafrir
Faisant écho à d'autres suggestions pour utiliser Java SSH bibliothèque. Mais je voulais commentaire sur Cohen réponse. L'envoi de votre mot de passe sur la ligne de commande lors de l'établissement de la connexion est sécurisée et ne peuvent pas non plus par de nombreux sshd serveurs (en fonction de la configuration).
Vous voudrez peut-être regarder dans la configuration de touches pour cela, vous pouvez effectuer des commandes ssh entre les machines sans mot de passe.
Étapes de base
- utilisation d'openssh pour créer une paire de clés (j'ai fait au RSA mais je sais qu'il y a une meilleure méthode maintenant)
- créer une .ssh répertoire dans votre dossier de base sur la machine SOURCE
- créer une .ssh répertoire dans votre dossier d'accueil sur l'ordinateur CIBLE
- garder votre clé privée dans votre code source de la machine .ssh dossier
- copier votre clé publique dans un fichier appelé authorized_keys dans la cible .ssh dossier
Certaines instructions peuvent être trouvées ici
OriginalL'auteur rogodeter
Vous pouvez exécuter des commandes à l'aide de edtFTPj/PRO, ainsi que d'effectuer des transferts de fichiers via SFTP. C'est de Java.
OriginalL'auteur Bruce Blackshaw