Próbuję pobrać plik z serwera za pomocą SFTP (w przeciwieństwie do FTPS) za pomocą Java. W jaki sposób mogę to zrobić?
228
Inną opcją jest rozważenie spojrzenia na bibliotekę JSch . JSch wydaje się być preferowaną biblioteką dla kilku dużych projektów open source, w tym między innymi Eclipse, Ant i Apache Commons HttpClient.
Ładnie obsługuje logowanie użytkownika / przepustkę i logowanie oparte na certyfikatach, a także całą gamę innych pysznych funkcji SSH2.
Oto proste zdalne pobieranie plików przez SFTP. Obsługa błędów pozostaje zadaniem dla czytelnika :-)
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();
Oto pełny kod źródłowy przykładu używającego JSch bez martwienia się o sprawdzenie klucza ssh.
źródło
finally
Blok powinien być używany do włączenia oczyszczenia kodu kanału, aby zapewnić, że zawsze działa.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)
Poniżej znajduje się przykład korzystania z Apache Common VFS:
źródło
To było rozwiązanie, które wymyśliłem http://sourceforge.net/projects/sshtools/ (większość błędów została pominięta dla jasności). To jest fragment mojego bloga
źródło
Ładną abstrakcją na Jsch jest Apache commons-vfs, który oferuje wirtualny interfejs API systemu plików, który sprawia, że dostęp i zapis plików SFTP jest prawie przezroczysty. Pracował dla nas dobrze.
źródło
Jest ładne porównanie 3 dojrzałych bibliotek Java dla SFTP: Commons VFS, SSHJ i JSch
Podsumowując, SSHJ ma najczystszy interfejs API i jest najlepszy z nich, jeśli nie potrzebujesz obsługi innych magazynów udostępnianych przez Commons VFS.
Oto edytowany przykład SSHJ z github :
źródło
Wspólny plik właściwości Java dla wszystkich przykładów
serverAddress = 111.222.333.444
userId = myUserId
hasło = mojeHasło
remoteDirectory = produkty /
localDirectory = import /
źródło
hierynomus / sshj ma pełną implementację SFTP w wersji 3 (co implementuje OpenSSH)
Przykładowy kod z SFTPUpload.java
źródło
Biblioteka JSch to potężna biblioteka, której można użyć do odczytu pliku z serwera SFTP. Poniżej znajduje się testowany kod do odczytu pliku z lokalizacji SFTP linia po linii
Zapoznaj się z blogiem dla całego programu.
źródło
Andy, aby usunąć plik na zdalnym systemie, musisz użyć
(channelExec)
JSch i przekazać polecenia unix / linux, aby go usunąć.źródło
Wypróbuj edtFTPj / PRO , dojrzałą, niezawodną bibliotekę klientów SFTP, która obsługuje pule połączeń i operacje asynchroniczne. Obsługuje również FTP i FTPS, więc wszystkie podstawy bezpiecznego transferu plików są objęte gwarancją.
źródło
Znalazłem pełny działający przykład dla SFTP w Javie przy użyciu JSCH API http://kodehelp.com/java-program-for-uploading-file-to-sftp-server/
źródło
Chociaż powyższe odpowiedzi były bardzo pomocne, spędziłem jeden dzień, aby je uruchomić, z różnymi wyjątkami, takimi jak „uszkodzony kanał”, „nieznany klucz rsa” i „uszkodzony pakiet”.
Poniżej znajduje się działająca klasa wielokrotnego użytku dla PLIKÓW SFTP UPLOAD / DOWNLOAD przy użyciu biblioteki JSch.
Wykorzystanie przesyłania:
Pobierz użycie:
Kod klasy:
źródło
Masz również JFileUpload z dodatkiem SFTP (również Java): http://www.jfileupload.com/products/sftp/index.html
źródło
Używam tego SFTP API o nazwie Zehon, jest świetny, tak łatwy w użyciu z dużą ilością przykładowego kodu. Oto strona http://www.zehon.com
źródło
Najlepszym rozwiązaniem, jakie znalazłem, jest Paramiko . Jest wersja Java.
źródło