Hallo zusammen,
ich hoffe ihr könnt mir weiterhelfen.
ich habe nur wenig Erfahrung mit Java.
ich will per Java über SSH aufs Raspberry zugreifen. (Commands schicken)
Das funktioniert auch soweit. Verbindung kann ich aufbauen und einzelne Befehle schicken.
Mein Ziel: Swingoberfläche bauen (kein Problem, hab ich schon oft gemacht)
Auf dieser GUI befinden sich Keylistener, die bei Tastenschlag bestimmte Methoden aufrufen sollen (hab ich auch schon)
Nur hab ich keine Ahnung, wie ich per diesen aufgerufenen Methoden einen Befehl per SSH schicken soll.
Mein SSH Zugriff funktioniert folgendermaßen:
Natürlich könnte ich einfach die gesammte Prozedur in die Methoden schreiben, aber ich will nicht bei jeden tastenschlag einen neue connection aufbauen usw...
code von Ganymed SSH-2
[Java]
package control;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class Basic
{
public static void main(String[] args)
{
String hostname = "192.168.1.105";
String username = "pi";
String password = "ultrageheim";
try
{
/* Create a connection instance */
Connection conn = new Connection(hostname);
/* Now connect */
conn.connect();
/* Authenticate.
* If you get an IOException saying something like
* "Authentication method password not supported by the server at this stage."
* then please check the FAQ.
*/
boolean isAuthenticated = conn.authenticateWithPassword(username, password);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
/* Create a session */
Session sess = conn.openSession();
sess.execCommand("uname -a && date && uptime && who");
System.out.println("Here is some information about the remote host:");
/*
* This basic example does not handle stderr, which is sometimes dangerous
* (please read the FAQ).
*/
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while (true)
{
String line = br.readLine();
if (line == null)
break;
System.out.println(line);
}
/* Show exit status, if available (otherwise "null") */
System.out.println("ExitCode: " + sess.getExitStatus());
/* Close this session */
sess.close();
/* Close the connection */
conn.close();
}
catch (IOException e)
{
e.printStackTrace(System.err);
System.exit(2);
}
}
public void tastendruck(){ // wird bei tasten druck aufgerufen
sess.execCommand("sudo etwas... ");
}
public void tastendruck_2(){ // wird bei tasten2 druck aufgerufen
sess.execCommand("sudo etwas anderes.. ");
}
}
[/Java]
Ich hoffe ihr könnt mir helfen!
Vielen Dank!
ich hoffe ihr könnt mir weiterhelfen.
ich habe nur wenig Erfahrung mit Java.
ich will per Java über SSH aufs Raspberry zugreifen. (Commands schicken)
Das funktioniert auch soweit. Verbindung kann ich aufbauen und einzelne Befehle schicken.
Mein Ziel: Swingoberfläche bauen (kein Problem, hab ich schon oft gemacht)
Auf dieser GUI befinden sich Keylistener, die bei Tastenschlag bestimmte Methoden aufrufen sollen (hab ich auch schon)
Nur hab ich keine Ahnung, wie ich per diesen aufgerufenen Methoden einen Befehl per SSH schicken soll.
Mein SSH Zugriff funktioniert folgendermaßen:
- connection aufbauen. (mit zugangsdaten)
- Session starten.
- Befehl schicken.
- session beenden.
- connection schließen.
Natürlich könnte ich einfach die gesammte Prozedur in die Methoden schreiben, aber ich will nicht bei jeden tastenschlag einen neue connection aufbauen usw...
code von Ganymed SSH-2
[Java]
package control;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class Basic
{
public static void main(String[] args)
{
String hostname = "192.168.1.105";
String username = "pi";
String password = "ultrageheim";
try
{
/* Create a connection instance */
Connection conn = new Connection(hostname);
/* Now connect */
conn.connect();
/* Authenticate.
* If you get an IOException saying something like
* "Authentication method password not supported by the server at this stage."
* then please check the FAQ.
*/
boolean isAuthenticated = conn.authenticateWithPassword(username, password);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
/* Create a session */
Session sess = conn.openSession();
sess.execCommand("uname -a && date && uptime && who");
System.out.println("Here is some information about the remote host:");
/*
* This basic example does not handle stderr, which is sometimes dangerous
* (please read the FAQ).
*/
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while (true)
{
String line = br.readLine();
if (line == null)
break;
System.out.println(line);
}
/* Show exit status, if available (otherwise "null") */
System.out.println("ExitCode: " + sess.getExitStatus());
/* Close this session */
sess.close();
/* Close the connection */
conn.close();
}
catch (IOException e)
{
e.printStackTrace(System.err);
System.exit(2);
}
}
public void tastendruck(){ // wird bei tasten druck aufgerufen
sess.execCommand("sudo etwas... ");
}
public void tastendruck_2(){ // wird bei tasten2 druck aufgerufen
sess.execCommand("sudo etwas anderes.. ");
}
}
[/Java]
Ich hoffe ihr könnt mir helfen!
Vielen Dank!
Zuletzt bearbeitet: