Ich versuche, eine Datei mit SFTP (im Gegensatz zu FTPS) mit Java von einem Server abzurufen. Wie kann ich das machen?
228
Eine andere Möglichkeit besteht darin, einen Blick auf die JSch-Bibliothek zu werfen . JSch scheint die bevorzugte Bibliothek für einige große Open-Source-Projekte zu sein, darunter Eclipse, Ant und Apache Commons HttpClient.
Es unterstützt sowohl Benutzer- / Pass- als auch zertifikatbasierte Anmeldungen sowie alle anderen leckeren SSH2-Funktionen.
Hier ist eine einfache Remote-Datei, die über SFTP abgerufen wird. Die Fehlerbehandlung bleibt dem Leser als Übung :-)
JSch jsch = new JSch();
String knownHostsFilename = "/home/username/.ssh/known_hosts";
jsch.setKnownHosts( knownHostsFilename );
Session session = jsch.getSession( "remote-username", "remote-host" );
{
// "interactive" version
// can selectively update specified known_hosts file
// need to implement UserInfo interface
// MyUserInfo is a swing implementation provided in
// examples/Sftp.java in the JSch dist
UserInfo ui = new MyUserInfo();
session.setUserInfo(ui);
// OR non-interactive version. Relies in host key being in known-hosts file
session.setPassword( "remote-password" );
}
session.connect();
Channel channel = session.openChannel( "sftp" );
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.get("remote-file", "local-file" );
// OR
InputStream in = sftpChannel.get( "remote-file" );
// process inputstream as needed
sftpChannel.exit();
session.disconnect();
Hier ist der vollständige Quellcode eines Beispiels mit JSch, ohne sich um die Überprüfung des SSH-Schlüssels kümmern zu müssen.
quelle
finally
Block sollte verwendet werden, um den Kanalbereinigungscode einzuschließen, um sicherzustellen, dass er immer ausgeführt wird.com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 2048 (inclusive)
Unten finden Sie ein Beispiel für die Verwendung von Apache Common VFS:
quelle
Dies war die Lösung, die ich mit http://sourceforge.net/projects/sshtools/ gefunden habe (die meisten Fehler wurden aus Gründen der Übersichtlichkeit weggelassen). Dies ist ein Auszug aus meinem Blog
quelle
Eine nette Abstraktion über Jsch ist Apache commons-vfs, das eine virtuelle Dateisystem-API bietet, die den Zugriff auf und das Schreiben von SFTP-Dateien nahezu transparent macht. Hat bei uns gut funktioniert.
quelle
Es gibt einen schönen Vergleich der 3 ausgereiften Java-Bibliotheken für SFTP: Commons VFS, SSHJ und JSch
Zusammenfassend lässt sich sagen, dass SSHJ die klarste API hat und die beste davon ist, wenn Sie keine Unterstützung für andere Speicher benötigen, die von Commons VFS bereitgestellt wird.
Hier ist ein SSHJ-Beispiel von github bearbeitet :
quelle
Gemeinsame Java-Eigenschaftendatei für alle Beispiele
serverAddress = 111.222.333.444
userId = myUserId
Passwort = meinPasswort
remoteDirectory = products /
localDirectory = import /
quelle
hierynomus / sshj hat eine vollständige Implementierung von SFTP Version 3 (was OpenSSH implementiert)
Beispielcode aus SFTPUpload.java
quelle
Die JSch-Bibliothek ist die leistungsstarke Bibliothek, mit der Dateien vom SFTP-Server gelesen werden können. Unten finden Sie den getesteten Code zum zeilenweisen Lesen der Datei vom SFTP-Speicherort
Bitte beziehen Sie sich auf den Blog für das gesamte Programm.
quelle
Andy, um eine Datei auf einem Remote-System zu löschen, müssen Sie
(channelExec)
JSch verwenden und Unix / Linux-Befehle übergeben, um sie zu löschen.quelle
Probieren Sie edtFTPj / PRO aus , eine ausgereifte, robuste SFTP- Clientbibliothek , die Verbindungspools und asynchrone Vorgänge unterstützt. Unterstützt auch FTP und FTPS, sodass alle Grundlagen für die sichere Dateiübertragung abgedeckt sind.
quelle
Ich fand komplettes Arbeits Beispiel für SFTP in Java unter Verwendung JSch API http://kodehelp.com/java-program-for-uploading-file-to-sftp-server/
quelle
Obwohl die obigen Antworten sehr hilfreich waren, habe ich einen Tag damit verbracht, sie zum Laufen zu bringen, und dabei verschiedene Ausnahmen wie "defekter Kanal", "RSA-Schlüssel unbekannt" und "Paket beschädigt" festgestellt.
Unten finden Sie eine funktionierende wiederverwendbare Klasse für das Hochladen / Herunterladen von SFTP-Dateien mithilfe der JSch-Bibliothek.
Verwendung hochladen:
Download-Nutzung:
Der Klassencode:
quelle
Sie haben auch JFileUpload mit SFTP-Add-On (auch Java): http://www.jfileupload.com/products/sftp/index.html
quelle
Ich benutze diese SFTP-API namens Zehon, sie ist großartig und mit viel Beispielcode einfach zu verwenden. Hier ist die Website http://www.zehon.com
quelle
Die beste Lösung, die ich gefunden habe, ist Paramiko . Es gibt eine Java-Version.
quelle