Saya mencoba untuk mengambil file dari server menggunakan SFTP (bukan FTPS) menggunakan Java. Bagaimana saya bisa melakukan ini?
228
Pilihan lain adalah mempertimbangkan melihat perpustakaan JSch . JSch tampaknya menjadi perpustakaan pilihan untuk beberapa proyek open source besar, termasuk Eclipse, Ant dan Apache Commons HttpClient, di antara yang lainnya.
Ini mendukung baik pengguna / pass dan login berbasis sertifikat dengan baik, serta semua sejumlah fitur SSH2 yummy lainnya.
Berikut ini file jarak jauh sederhana yang diambil dari SFTP. Penanganan kesalahan dibiarkan sebagai latihan untuk pembaca :-)
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();
Berikut adalah kode sumber lengkap contoh menggunakan JSch tanpa harus khawatir tentang pemeriksaan kunci ssh.
sumber
finally
blok harus digunakan untuk menyertakan saluran kode yang bersih-up, untuk memastikan bahwa itu selalu berjalan.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)
Di bawah ini adalah contoh menggunakan Apache Common VFS:
sumber
Ini adalah solusi yang saya buat dengan http://sourceforge.net/projects/sshtools/ (kebanyakan penanganan kesalahan dihilangkan untuk kejelasan). Ini adalah kutipan dari blog saya
sumber
Sebuah abstraksi yang bagus di atas Jsch adalah Apache commons-vfs yang menawarkan API sistem file virtual yang membuat mengakses dan menulis file SFTP hampir transparan. Bekerja dengan baik untuk kita.
sumber
Ada perbandingan yang bagus dari 3 perpustakaan Java dewasa untuk SFTP: Commons VFS, SSHJ dan JSch
Singkatnya SSHJ memiliki API paling jelas dan ini yang terbaik jika mereka tidak membutuhkan dukungan penyimpanan lain yang disediakan oleh Commons VFS.
Berikut ini contoh SSHJ yang diedit dari github :
sumber
File properti java umum untuk semua contoh
serverAddress = 111.222.333.444
userId = myUserId
kata sandi = myPassword
remoteDirectory = produk /
localDirectory = impor /
sumber
hierynomus / sshj memiliki implementasi lengkap SFTP versi 3 (apa yang diterapkan OpenSSH)
Contoh kode dari SFTPUpload.java
sumber
Pustaka JSch adalah pustaka yang kuat yang dapat digunakan untuk membaca file dari server SFTP. Di bawah ini adalah kode yang diuji untuk membaca file dari lokasi SFTP baris demi baris
Silakan merujuk blog untuk seluruh program.
sumber
Andy, untuk menghapus file pada sistem jarak jauh Anda perlu menggunakan
(channelExec)
JSch dan mengirimkan perintah unix / linux untuk menghapusnya.sumber
Coba edtFTPj / PRO , pustaka klien SFTP yang matang dan kuat yang mendukung kumpulan koneksi dan operasi asinkron. Juga mendukung FTP dan FTPS sehingga semua basis untuk transfer file aman tercakup.
sumber
Saya menemukan contoh kerja lengkap untuk SFTP di java menggunakan JSCH API http://kodehelp.com/java-program-for-uploading-file-to-sftp-server/
sumber
Meskipun jawaban di atas sangat membantu, saya telah menghabiskan satu hari untuk membuatnya bekerja, menghadapi berbagai pengecualian seperti "saluran rusak", "kunci rsa tidak diketahui" dan "paket rusak".
Di bawah ini adalah kelas reusable yang berfungsi untuk SFTP FILES UPLOAD / UNDUH menggunakan perpustakaan JSch.
Penggunaan unggahan:
Penggunaan unduhan:
Kode kelas:
sumber
Anda juga memiliki JFileUpload dengan add-on SFTP (Java juga): http://www.jfileupload.com/products/sftp/index.html
sumber
Saya menggunakan SFTP API yang disebut Zehon ini, sangat bagus, sehingga mudah digunakan dengan banyak kode sampel. Berikut adalah situs http://www.zehon.com
sumber
Solusi terbaik yang saya temukan adalah Paramiko . Ada versi Java.
sumber