# Einfache Verbindung zu Linux Server und Datei auslesen



## dexxter275 (20. Jan 2014)

Hallo zusammen,

ich habe eine kleine Aufgabe bekommen.. Ich arbeite mit NetBeans und will ein ganz einfaches kleines Java-Programm schreiben, welches auf einen Linux-Server zugreift und dort lediglich die Datei ausliest und mir dann in dem output fenster den text aus der Datei anzeigt. 

Nach Möglichkeit das Passwort und den Benutzernamen in einer Variablen speichern, sodass ich das nicht immer eingeben muss.

Habe verschiedene Sachen schon gefunden im Internet, aber irgendwie war noch nicht das dabei was ich suche... Habe auch einen Quelltext gefunden, der Autor hat jedoch die Jsch-Bibliothek genutzt und die habe ich nicht implementiert. 

Ich weiß nicht weiter...


----------



## turtle (20. Jan 2014)

So ganz habe ich nicht verstanden, was du machen möchtest.

Von wo nach wo möchtest du einen FileTransfer machen?

Von dem was du beschreibst, VERMUTE ich das du von Windows auf einen Linux-Server zugreifen möchtest, um von da eine Datei zu laden und unter Windows (Kommandozeile) anzuzeigen.

Wenn meine Annahme NICHT richtig ist, musst du es genauer beschreiben.

Wenn das richtig ist, ist doch Jsch keine schlechte Wahl. Du musst die JAR-Datei in dein Projekt einbinden und ein Programm nach diesem Vorbild schreiben.


----------



## dexxter275 (20. Jan 2014)

Hi,

danke für deine Antwort.

Von Windows in dem Editor Netbeans ein Java-Programm, welches eine Datei von einem Linux Server ausliest und den Inhalt ausgibt. Es gibt im Netbean ein Outpute Feld was die Ausgabe anzeigt. Sprich es öffnet sich keine Kommandozeile o.ä.. Ich hatte einen Quelltext aus dem Internet, habe die JAR-Datei auch eigentlich eingebunden, allerdings hat Netbeans gemeint, dass er das Paket nicht kennt. Außerdem war der Quelltext für einen Webserver gedacht wo er per URL drauf zugegriffen hat. Das ist ja nicht das was ich suche. Ich möchte IP, Username, Passwort und Pfad in dem Quelltext reinschreiben, das Programm starten und als Ausgabe den Inhalt der Datei haben. 

Hoffe ist nun verständlich erklärt.


----------



## turtle (20. Jan 2014)

ja, ok ist nun klarer, danke...

Aber der Link den ich bereits nannte, ist doch eine stinknormale Applikation mit einer main-Methode, die du einfach starten kannst.

Habe gerade kurz das Beispiel geladen und bei mir in Eclipse eingebunden (ich kenne NetBeans nicht). Zumindest kompiliert es ohne Probleme. 

Ob's auch funktioniert kann ich nicht testen, da kein Zugriff auf Linux-Server.


----------



## dexxter275 (21. Jan 2014)

Hallo,

habe den Link übersehen. Habe jetzt mal den Quelltext genommen und komplett eingefügt. Nun bleibt noch das Problem mit dem Jsch. 

Habe das Paket heruntergeladen und in Netbeans implementiert/eingebunden.

Allerdings sagt mir das Programm immernoch, dass das Paket nicht vorhanden ist (package com.jcraf.jsch.* does not exist)

was tun?


----------



## dexxter275 (21. Jan 2014)

ziehe meine Aussage zurück. Habe das JAR-File in den falschen Einstellungen eingefügt. Ich teste nun das Programm...

--- edit ---

usage: java ScpFrom user@remotehost:file1 file2
Java Result: -1

das ist die fehlermeldung. finde aber leider nicht die stelle wo ich die daten vom server angeben muss....

noch eine frage zusätzlich:

habe glaube auch hier im forum diesen quelltext gefunden. mit eingebenen user, host und passwort sagt er trotzdem failed weiß wer worans liegt?


```
import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.Session;
     
     
    public class Main {
     
        
        public static void main(String[] arg){
           
           
            try{
                  String user="hier user";
                  String host="hier host";
                  JSch jsch=new JSch();
                  Session session=jsch.getSession(user, host, 22);
                  session.setPassword("hier passwort");
                  session.setConfig("StrictHostKeyChecking", "yes");
                  session.connect();
                  System.out.println("Connected");
                  
                  
                              
            } catch (Exception e) {
                System.out.println("Failed");
            }
     
           
        }
     
    }
```


----------



## Spitfire777 (22. Jan 2014)

> usage: java ScpFrom user@remotehost:file1 file2
> Java Result: -1
> 
> das ist die fehlermeldung. finde aber leider nicht die stelle wo ich die daten vom server angeben muss....


Das Programm sagt genau was du machen musst. Du musst das Programm nach dem oben stehenden Muster mit den entsprechenden Parametern ausführen. Wenn du Eclipse verwendest, kannst du die Parameter in den Run Configurations setzen. 

1. Parameter: user@remotehost:file1
2. Parameter: file2

Ich rate dir aber, mit deinem unten stehenden Ansatz weiter zu machen, da bist du schon auf dem richtigen Weg.



> habe glaube auch hier im forum diesen quelltext gefunden. mit eingebenen user, host und passwort sagt er trotzdem failed weiß wer worans liegt?


Ja. Liegt am Copy&Paste. Er sagt "Failed", weils du es bzw. der ursprüngliche Autor so programmiert hat. 

```
...
} catch (Exception e) {
    System.out.println("Failed");
}
```

Diese Zeile

```
System.out.println("Failed");
```
in

```
e.printStackTrace();
```
umändern und den Output posten.

Ich glaube aber schon zu wissen (bin mir nicht sicher), woran es liegt, dass es fehlschlägt.
Diese Zeile

```
session.setConfig("StrictHostKeyChecking", "yes");
```
in

```
session.setConfig("StrictHostKeyChecking", "no");
```
umändern.

Schreib, obs funktioniert hat.


----------



## dexxter275 (22. Jan 2014)

Guten Morgen,

danke für deine Hilfe. Ja ich errinere mich wieder.


```
e.printStackTrace();
```

das gleiche Problem hatte der Autor aus dem Thema wo ich den Quelltext her habe auch 

Ich gehe stark davon aus, dass es geht. Kann es aber leider erst morgen früh testen. Werde mich morgen um 7 mal melden 

dankee )


----------



## dexxter275 (23. Jan 2014)

Guten Morgen,

herzlichen Dank! Die Verbindung funktioniert nun!! ) 

Jetzt muss ich nur noch irgendwie versuchen in einem Verzeichnis auf dem Server eine Datei auslesen zu können. 

Hast du das vielleicht eins, zwei Tipps für mich ?

Hier nochmal mein momentaner Code... Bisschen was aus dem Internet und aus dem Forum hier zusammen gewürfelt. Connect funktioniert. Datei auslesen noch nicht so ganz 



```
import org.junit.Test;     
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.JSchException;
    import com.jcraft.jsch.Session;
    import java.io.File;
import java.io.FileReader;
import java.io.IOException;

    
    public class Main {

    @Test
    
     private static void ladeDatei(String datName) {

        File file = new File(datName);

        if (!file.canRead() || !file.isFile())
            System.exit(0);

        FileReader fr = null;
        int c;
        StringBuffer buff = new StringBuffer();
        try {
            fr = new FileReader(file);
            while ((c = fr.read()) != -1) {
                buff.append((char) c);
            }
            fr.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(buff.toString());
    } 
    
    
        public static void main(String[] arg) throws Exception{
           
           
            try{
                  String user="hier name";
                  String host="IP.IP.IP.IP";
                  JSch jsch=new JSch();
                  Session session=jsch.getSession(user, host, 22);
                  session.setPassword("hier das passwort hin");
                  session.setConfig("StrictHostKeyChecking", "no");
                  session.connect();
                  System.out.println("Connected");    
                 
                      String dateiName = "/ordner/unterordner/datei.txt";   //datei.txt liegt auf dem Server
                      ladeDatei(dateiName);      
                     
                  session.disconnect();
                              
                 } catch (JSchException e) {
                     e.printStackTrace();
                 } 
            
                                                                
  }
  }
```




MfG


----------



## dexxter275 (24. Jan 2014)

Hat irgendjemand eine Idee worans liegen könnte, dass es nicht funktioniert?

Habe noch was im hier im Forum gefunden:

Ausgabe ist allerdings der lokale Ordner wo Netbeans installiert ist und nicht auf dem Server....


```
Process proc = Runtime.getRuntime().exec("ls");
      BufferedReader in = new BufferedReader(new InputStreamReader(proc.
            getInputStream()));
      String strLine = "";
      while ( ( strLine = in.readLine() ) != null)
      {
           System.out.println(strLine);
      }
```


----------



## dexxter275 (26. Jan 2014)

--- push ----


----------



## dexxter275 (30. Jan 2014)

Ich brauche eure Hilfe!


----------



## Sen-Mithrarin (1. Feb 2014)

unabhängig von dem was du machst ein paar anmerkungen

1) man sollte zur sicherheit den ssh-deamon auf einem anderen port laufen lassen
2) auch sollte man den sshd so einstellen das er nicht über passwort-auth sondern mit key-files arbeitet was die sicherheit noch mal deutlich erhöt
3) man sollte host-key-checking nutzen um auch sicher zu gehen das man sich mit dem korrekten server verbindet

die lib sollte entsprechende möglichkeiten anbieten


----------



## turtle (2. Feb 2014)

> Ausgabe ist allerdings der lokale Ordner wo Netbeans installiert ist und nicht auf dem Server....
> 
> Process proc = Runtime.getRuntime().exec("ls");


Wundert mich nicht, wenn du 'ls' lokal ausführst, oder?

Im Beispielcode steht da sogar ein Kommentar zum Kommando, was du mal probieren solltest. Aber wie gesagt kein Zugang zu einer Unix-Box.


```
// exec 'scp -f rfile' remotely
      String command="scp -f "+rfile;
```


----------

