jsch copy ist das möglich

Joob

Top Contributor
Ich würde gerne mit jsch auf meinem Server kopieren.
Leider habe ich nur etwas gefunden wobei die Datei erst hochgeladen wird und dann wieder herunter.

Es gibt aber doch den Befehl setcommand
kann man da nicht direkt auf den Server den Befehl zum kopieren absetzen kann .

Berechtigungen liegen dabei bei dem gleichen ServerUser.
 
K

kneitzel

Gast
jsch ist eine SSH Library.

Aber die Frage verstehe ich nicht. "Auf den Server kopieren" bedeutet doch "hochladen". Also Gratulation: Du hast etwas gefunden, das dies macht.
Das herunter laden ist das "Vom Server auf den lokalen Rechner kopieren" - den Part brauchst Du also nicht.
 

temi

Top Contributor
Es gibt mehrere Möglichkeiten des Datenflusses:

  1. Vom Client zum Server (hochladen)
  2. Vom Server zum Client (runterladen)
  3. Innerhalb des Servers
  4. Innerhalb des Clients
Bitte wähle, was davon du machen möchtest.
 
K

kneitzel

Gast
Ach so - evtl. eine Datei auf dem Server kopieren? Dann nutz nicht die Transfer-Methode sondern setz den entsprechenden Befehl ab. Also den "exec" channel und als Befehl dann sowas wie "cp sourcefile targetfile" - um eine einfache Möglichkeit zu nennen.
 

Joob

Top Contributor
Mir geht es um einen Kopiervorgang innerhalb des Servers.
Und das was kneitzel vorgeschlagen hat ist genau das was ich gesucht habe.
Ich schau mir das mal an und hoffe das ich damit klarkomme.

Schönen Dank erst mal.
 

Joob

Top Contributor
Leider haut das nicht hin und ich weiß nicht warum

connect klappt
Wenn ich mich mit Putty einlooge unter dem User kann ich den Befehl in der Konsole ausführen,

wenn aber das Programm es macht dann passiert nichts.

Java:
                   channelExec = (ChannelExec) session.openChannel( "exec" );
                    if( channelExec == null )
                    {
                        logoutSftp();
                        String errMes = "Fehler beim Oeffnen des Exec-Channel zur Session mit '" + session.getUserName() + "' an '" + session.getHost() + "'. " ;
                        Logger.getLogger(SFtpToolsClass.class.getName()).log(Level.WARNING, errMes, errMes);
                        throw new IOException( );
                    }   
                    channelExec.connect();

und der Befehl:
Java:
        boolean copyJobDone = false;
        try {
            connectServer(alternativAccess, 2);
            
            String copyCommand = "cp -u " + source + " " + destination;
            
            ((ChannelExec)channelExec).setCommand(copyCommand);
             copyJobDone = true;
            
        } catch (IOException ex) {
            Logger.getLogger(SFtpToolsClass.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
        
        } finally
        {
            logoutExec();
        }
        return copyJobDone;

kann jemand den Fehler erkennen,
der Commandstring ist : cp -u /home/....../H-7.pdf /home/...../TASK_64.pdf und der läuft wie gesagt unter dem User im Terminal
 
K

kneitzel

Gast
Also irgendwie finde ich Deinen Code extrem schlecht lesbar ... Von welchem Typ ist die Variable channelExec?

Die ganzen Casts sollten so nicht notwendig sein - bei der Variable ist es aber deutlich,,dass die Casts zumindest teilweise so Unsinn sind ...

Java:
channelExec = (ChannelExec) session.openChannel( "exec" );
((ChannelExec)channelExec).setCommand(copyCommand);

Wenn channelExec vom Typ (ChannelExec) ist, dann könnte der erste Cast notwendig sein, aber dann bräuchte es den zweiten nicht ... oder umgekehrt ... Egal wie dem auch sei: Schwer zu lesen ... openChannel gibt einen Channel zurück .. und von dem Typ würde ich die Variable dann auch nutzen ...

Und nach meinem ersten Verständnis ist das so nicht korrekt. Der Ablauf ist doch, du erstellst den channel, setzt die Werte (command, in/out streams, ...) und dann machst Du den connect.

Bei sowas würde ich mich ansonsten etwas nach Beispielen richten, die es zu einem Projekt gibt und dann mit denen erst einmal rumspielen und dann durch Anpassungen die Funktionalität im Detail zu verstehen. Dann kann man sich auch überlegen, wie das in die eigene Applikation rein passt und was man ggf. noch für weitere Klassen benötigt ...

Und dann ist ggf. auch der err und der out Stream interessant - die würde ich auch auslesen - bei den Tests dann ruhig wie in dem Beispiel mit System.out und System.err nutzen .... Dann bekommt Du ggf. Probleme mit, wie Befehl nicht im Pfad oder so ... (Wobei cp in der Regel in /bin/cp ist und das sollte gefunden werden...)
 

Joob

Top Contributor
Ich habe meinen Fehler gesehen,
ich darf das Connect erst machen nachdem ich den Befehl gesetzt habe.
So haut das hin.

Gibt es vielleicht noch was zu verbessern ?
 

Joob

Top Contributor
Das casten habe ich entfernt, danke für den Tip.

Das mit der Lesbarkeit liegt vielleicht daran, das ich alle FileTransferfunktionalitäten in einer Klasse habe.
Der obere Teil ist ein Auszug aus der Methode die die Verbindung herstellt.
Ist schwierig alles mitzugeben.

Der untere ist die Methode die die Funktionalität abbildet.

Ich habe das jetzt so verstanden,
ich definieren einen Channel zum Ausführen eines Befehls.
Dann setzt ich den Befehl.
Danach mache ich den Connect.
Dabei wird der Befehl auf dem Server ausgeführt.
Dann schließe ich die Verbindung wieder.

Liege ich da falsch ?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
B SSH mit Jsch, mehrere Befehle senden Netzwerkprogrammierung 4
C JSch ist nicht dokumentiert Netzwerkprogrammierung 2
F JSch - inputstream is closed Netzwerkprogrammierung 13
M Socket SFTP mit JSCH - Speedproblem Netzwerkprogrammierung 3
M JAX-WS unter Java 17 plötzlich nicht mehr möglich Netzwerkprogrammierung 5
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
F HTTP Netzwerkverbindung mit jar nich möglich Netzwerkprogrammierung 2
P FTP Server mit Java, möglich ? Netzwerkprogrammierung 4
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
M Senden von Daten nicht direkt möglich? Netzwerkprogrammierung 6
N SFTP apache keine Verbindungaufbau möglich Netzwerkprogrammierung 6
A UCP Connection über Proxy möglich? Netzwerkprogrammierung 7
E DatagramSocket rausfinden ob recive möglich ohne zu blocken Netzwerkprogrammierung 10
ABstraCT Applet multipler port Zugriff möglich ? Netzwerkprogrammierung 5
S RMI-Problem: Nur ein Server start möglich. Netzwerkprogrammierung 40
5 Webservice max. mit 5 Clients möglich Netzwerkprogrammierung 10
D Was für Verbindungen mit Socket möglich? Netzwerkprogrammierung 2
M Ist es möglich die DSL-Router Verbindung zu unterbrechen? Netzwerkprogrammierung 5
C 2 BufferedReader als Listener pro Socket (NICHT) möglich? Netzwerkprogrammierung 2
G Chat zwischen applets: möglich? Netzwerkprogrammierung 2
K Chat: Nur 1 Verbindung zum Server möglich :( Netzwerkprogrammierung 6
A Serialisierung über Sockets möglich? Netzwerkprogrammierung 3

Ähnliche Java Themen


Oben