K
Knödel0815
Gast
Hallo.
Ich bin nicht ganz sicher, ob ich im richtigen Unterpunkt poste, aber es gab keinen SSH-Unterpunkt, also dachte ich, bei XML wird man damit wohl meist zu tun haben. Ich hoffe, das war richtig.
Ich bin gerade ziemlch verwirrt. In meinem Java-Code verbinde ich mich mit einem Server (Linux ist daraf Betriebssystem.) und möchte die SSH-Version abfragen (also ssh -V).
Führe ich den Befehl im PuTTY aus, gibt er mir auch ganz normal die SSH-Version aus. Da funktioniert der Befehl also.
Doch im Java-Code bekomme ich immer null. (Also null schreibt er ins XML-File und in der Konsole gibt er mir nichts aus.)
Schreibe ich nun aber an die Stelle, wo ich den Befehl ssh -V gebe, stattdessen zum Beispiel uname -a hin, gibt er mir in der Konsole exakt das aus (und schreibt es ins XML-File), was er auch in PuTTY darauf ausgibt.
Gibt es da vielleicht Besonderheiten, die einige Befehle betreffen? Oder hat sonst schonmal jemand ähnliche Erfahrungen gemacht und hätte eine Lösungsidee für mich?
Vielen Dank im Voraus.
Ich poste mal das betreffende Codestück mit.
P.S.: Ich arbeite noch nicht allzu lange mit Java, also bitte seht darüber hinweg, wenn der Code eventuell unschön ist.
Ich bin nicht ganz sicher, ob ich im richtigen Unterpunkt poste, aber es gab keinen SSH-Unterpunkt, also dachte ich, bei XML wird man damit wohl meist zu tun haben. Ich hoffe, das war richtig.
Ich bin gerade ziemlch verwirrt. In meinem Java-Code verbinde ich mich mit einem Server (Linux ist daraf Betriebssystem.) und möchte die SSH-Version abfragen (also ssh -V).
Führe ich den Befehl im PuTTY aus, gibt er mir auch ganz normal die SSH-Version aus. Da funktioniert der Befehl also.
Doch im Java-Code bekomme ich immer null. (Also null schreibt er ins XML-File und in der Konsole gibt er mir nichts aus.)
Schreibe ich nun aber an die Stelle, wo ich den Befehl ssh -V gebe, stattdessen zum Beispiel uname -a hin, gibt er mir in der Konsole exakt das aus (und schreibt es ins XML-File), was er auch in PuTTY darauf ausgibt.
Gibt es da vielleicht Besonderheiten, die einige Befehle betreffen? Oder hat sonst schonmal jemand ähnliche Erfahrungen gemacht und hätte eine Lösungsidee für mich?
Vielen Dank im Voraus.
Ich poste mal das betreffende Codestück mit.
P.S.: Ich arbeite noch nicht allzu lange mit Java, also bitte seht darüber hinweg, wenn der Code eventuell unschön ist.
Java:
public class XMLSSHTest {
public static void main(String[] args) {
// Hier stehen die Daten des Webservers.
String hostname = "XXX.XXX.XXX.XXX";
String username = "XXXXXXXX";
String password = "XXXXXXXXXXXX";
try {
// Hier erfolgt die Instanziierung der Verbindung.
Connection conn = new Connection(hostname);
// Dies ist die Verbindung. Danach wird eine Erfolgsmeldung
// ausgegeben.
conn.connect();
System.out.println("Connection successful.");
// Nun erfolgt die Authentifizierung. Dies ist die Variante mit
// Passwort. (Es wäre auch noch eine Authentifizierung mit PublicKey
// möglich, aber das ist in diesem Fall zu umständlich.)
// Es erfolgt eine Ausgabe über Erfolg oder Misserfolg der
// Authentifizierung.
boolean isAuthenticated = conn.authenticateWithPassword(username,
password);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
else
System.out.println("Authentification successful.");
// Hier wird eine Session erstellt, in der dann die Befehle
// ausgeführt werden können.
Session sion = conn.openSession();
System.out.println("Session started.");
// Als Beispiel erfolgt hier der Befehle "ssh -V".
[B]// Wenn ich genau hier uname -a hinschreibe, macht das Programm alles, wie es soll.[/B]
sion.execCommand("ssh -V");
System.out.println("Hier sind ein paar Informationen zum Host:");
/* Show exit status, if available (otherwise "null") */
// Ich weiß ehrlich gesagt nicht, was die Passage tut. Irgendein Fehlerabfang?
System.out.println("ExitCode: " + sion.getExitStatus());
// Hier erfolgt die Erstellung des OutputStreams.
try {
OutputStream fout = new FileOutputStream("SSHTest.xml", true);
OutputStream bout = new BufferedOutputStream(fout);
OutputStreamWriter out = new OutputStreamWriter(bout, "8859_1");
// Hier erfolgt die Erstellung des InputStreams.
InputStream ddout = new StreamGobbler(sion.getStdout());
// Dies ist die Abfrage der Informationen vom Server.
BufferedReader br4 = new BufferedReader(new InputStreamReader(
ddout));
while (true) {
String line4 = br4.readLine();
//Die Infrmationen des Servers werden ins XML-File geschrieben.
// out.write("<?xml version=\"1.0\" ");
// out.write("encoding=\"ISO-8859-1\"?>\r\n");
out.write("ssh -V: ");
out.write(line4 + "\r\n");
out.flush(); // Don't forget to flush!
out.close();
// Die Aufbereitung der Daten zur Ausgabe in der Console.
if (line4 == null)
break;
System.out.println(line4);
}}
//Die Fehlerverarbeitung für das Schreiben ins XML-File.
catch (UnsupportedEncodingException e) {
System.out
.println("This VM does not support the Latin-1 character set.");
} catch (IOException e) {
System.out.println(e.getMessage());
}
// Schließen der Session.
sion.close();
System.out.println("Session sion closed.");
// Schließen der Connection.
conn.close();
System.out.println("Connection closed.");
} catch (IOException e) {
e.printStackTrace(System.err);
System.exit(2);
}
}
}