Comment exécuter des commandes SSH sur un système distant en utilisant Java?
je suis nouveau dans ce genre D'application Java et je cherche un exemple de code sur la façon de se connecter à un serveur distant en utilisant SSH , exécuter des commandes, et récupérer la sortie en utilisant Java comme langage de programmation.
5 réponses
jetez un coup d'oeil à Runtime.exec () Javadoc
Process p = Runtime.getRuntime().exec("ssh myhost");
PrintStream out = new PrintStream(p.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
out.println("ls -l /home/me");
while (in.ready()) {
String s = in.readLine();
System.out.println(s);
}
out.println("exit");
p.waitFor();
JSch est une implémentation Java pure de SSH2 qui vous aide à exécuter des commandes sur des machines distantes. Vous pouvez le trouver ici, et il y a quelques exemples ici.
Vous pouvez utiliser exec.java
.
ci-dessous est la façon la plus facile de SSh en java. Téléchargez le fichier dans le lien ci-dessous et extrayez, puis ajoutez le fichier jar à partir du fichier extrait et ajoutez à votre chemin de construction du projet http://www.ganymed.ethz.ch/ssh2/ et d'utiliser la méthode ci-dessous
public void SSHClient(String serverIp,String command, String usernameString,String password) throws IOException{
System.out.println("inside the ssh function");
try
{
Connection conn = new Connection(serverIp);
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword(usernameString, password);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
ch.ethz.ssh2.Session sess = conn.openSession();
sess.execCommand(command);
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
System.out.println("the output of the command is");
while (true)
{
String line = br.readLine();
if (line == null)
break;
System.out.println(line);
}
System.out.println("ExitCode: " + sess.getExitStatus());
sess.close();
conn.close();
}
catch (IOException e)
{
e.printStackTrace(System.err);
}
}
vous pouvez jeter un oeil à ce cadre basé sur Java pour l'exécution de commandes à distance, incl. via SSH: https://github.com/jkovacic/remote-exec Il s'appuie sur deux bibliothèques SSH opensource, soit JSch (pour cette implémentation, même une authentification ECDSA est prise en charge) ou Ganymed (une de ces deux bibliothèques sera suffisante). Au premier coup d'œil, cela peut sembler un peu complexe, vous aurez à préparer beaucoup de classes liées à SSH (fournir le serveur et vos détails d'utilisateur, détails de cryptage, fournir des clés privées compatibles OpenSSH, etc. mais le SSH lui-même est assez complexe aussi). D'un autre côté, la conception modulaire permet l'inclusion simple d'un plus grand nombre de bibliothèques SSH, la mise en œuvre facile du traitement de sortie d'autres commandes ou même des classes Interactives, etc.