# Über Socket an Linux-Server Kommandos absetzen?



## Nicole81 (18. Sep 2007)

Hi Jungs,

gibt es eine Möglichkeit von einem Java-Programm heraus, das auf einem Arbeitsplatzrechner läuft, über das Netzwerk (Java-Sockets??) einen Befehl (Kommandozeilenbefehl) an einen Linux-Server abzusetzen und die "Antwort" abzufangen?

Vielen Dank schon mal!!!

Liebe Grüße Nicole


----------



## tuxedo (18. Sep 2007)

Um deine Frage zu beantworten: Ja.

Kleine Ergänzung:
Wie wär's mit SSH? Es gibt SSH-Bibliotheken für Java.

Ansonsten kannst du natürlich auch eine Client-Serveranwendung schreiben die auf dem Server Befehle ausführt und das Ergebnis zurück an den Client schickt.

- Alex


----------



## Nicole81 (18. Sep 2007)

Danke Alex, ich werde mal nach den SSH Bibs suchen.

Aber wenn ich das ganze von "Hand" erstellen möchte, wie kann ich da genau vorgehen.

Ich bin Anfänger, meine Idee wäre gewesen eine kleine Server App die über ein ServerSocket auf eine Verbindung wartet und ein Client, der eine Verbindung über ein Socket aufbaut.

Aber wie kann ich über ein Socket eine SSH Verbindung aufbauen mit Passwort usw?

Danke


----------



## tuxedo (18. Sep 2007)

Dein erster Ansatz wäre schon eine Möglichkeit.

Wenn du aber eine SSH-Bibliothek nutzt, dann musst du dich nicht mehr um Sockets kümmern, macht alles die Bibliothek.

Der Vorteil einer SSH Verbindung liegt zum einen in der verschlüsselung, und zum anderen darin, dass du keine Serverkomponente mehr entwickeln musst die das gleiche macht wieder Linux-Rechner schon von sich aus kann.


Hier mal ein Link zu einer Lib die ich schon verwendet habe:

http://www.ganymed.ethz.ch/ssh2/

Und weil ich heut so gut drauf bin noch ein kleiner Codeschnipsel:


```
Connection conn = new Connection(123.123.123.123, 22);
conn.connect();

if (conn.isAuthMethodAvailable("meinSshUser", "keyboard-interactive")) {
                                        ICallback ic = new ICallback("meinSshPasswort");

                                        boolean res = conn.authenticateWithKeyboardInteractive("meinSshUser", ic);

                                        if (res == true) {
                                                // successful connected
                                        }
                                        else {
// not connected ... ;-(
                                        }
                                }

 Session sess = conn.openSession();

                                int x_width = 90;
                                int y_width = 30;

                                sess.requestPTY("dumb", x_width, y_width, 0, 0, null);
                                sess.startShell();

// über das sess-objekt den eingabe und auzsgabestrom holen und damit arbeiten (befehle senden, ausgaben der befehle empfangen)

sess.close();
conn.close();
```

Hab den Code schnell zusammenkopiert. Kann sein dass ein paar Fehler drin sind, aber prinzipiell sollt's so gehen.

- Alex


----------



## Nicole81 (18. Sep 2007)

Ei wunderbar, was es alles gibt *freu*

Habe es zum laufen bekommen!!

Vielen Dank!!!


----------

