Peringatan | Versi SSHJ hingga dan termasuk 0.37.0 rentan terhadap CVE-2023-48795 - Terrapin. Harap tingkatkan ke 0.38.0 atau lebih tinggi. |
Untuk memulai, lihat salah satu contohnya. Semoga Anda merasa API ini menyenangkan untuk digunakan :)
Untuk mendapatkan SSHJ, Anda memiliki dua opsi:
Tambahkan ketergantungan pada SSHJ ke proyek Anda.
Bangun SSHJ sendiri.
Dan jika mau, Anda juga dapat menjalankan contoh SSHJ.
Rilis biner SSHJ tidak disediakan di sini, tetapi Anda dapat mendownloadnya langsung dari repositori Maven Central jika Anda mau.
Jika Anda membangun proyek menggunakan Maven, Anda dapat menambahkan ketergantungan berikut ke pom.xml
:
< dependency >
< groupId >com.hierynomus</ groupId >
< artifactId >sshj</ artifactId >
< version >0.38.0</ version >
</ dependency >
Jika proyek Anda dibuat menggunakan alat pembangunan lain yang menggunakan repositori Maven Central, terjemahkan ketergantungan ini ke dalam format yang digunakan oleh alat pembangunan Anda.
Kloning repositori SSHJ.
Pastikan Anda telah menginstal Java6 dengan Java Cryptography Extensions (JCE) berkekuatan tak terbatas.
Jalankan perintah ./gradlew clean build
.
Di direktori examples
, terdapat proyek Maven terpisah yang menunjukkan bagaimana perpustakaan dapat digunakan dalam beberapa kasus contoh. Jika Anda ingin menjalankannya, ikuti panduan berikut:
Instal Maven 2.2.1 atau lebih tinggi.
Kloning repositori SSHJ.
Masuk ke direktori examples
dan jalankan perintah mvn eclipse:eclipse
.
Impor proyek examples
ke Eclipse.
Ubah detail login di kelas contoh (alamat, nama pengguna dan kata sandi) dan jalankan!
membaca file unknown_hosts untuk verifikasi kunci host
kunci publik, kata sandi, dan otentikasi keyboard-interaktif
perintah, subsistem dan saluran shell
penerusan port lokal dan jarak jauh
scp + selesaikan implementasi sftp versi 0-3
Implementasi/adaptor untuk algoritma berikut disertakan:
aes{128,192,256}-{cbc,ctr}
, aes{128,256}[email protected]
, blowfish-{cbc,ctr}
, [email protected]
, 3des-{cbc,ctr}
, twofish{128,192,256}-{cbc,ctr}
, twofish-cbc
, serpent{128,192,256}-{cbc,ctr}
, idea-{cbc,ctr}
, cast128-{cbc,ctr}
, arcfour
, arcfour{128,256}
SSHJ juga mendukung cipher yang diperluas (tidak resmi) berikut: camellia{128,192,256}-{cbc,ctr}
, camellia{128,192,256}-{cbc,ctr}@openssh.org
diffie-hellman-group1-sha1
, diffie-hellman-group14-sha1
, diffie-hellman-group14-sha256
, diffie-hellman-group15-sha512
, diffie-hellman-group16-sha512
, diffie-hellman-group17-sha512
, diffie-hellman-group18-sha512
diffie-hellman-group-exchange-sha1
, diffie-hellman-group-exchange-sha256
, ecdh-sha2-nistp256
, ecdh-sha2-nistp384
, ecdh-sha2-nistp521
, [email protected]
SSHJ juga mendukung algoritma pertukaran kunci yang diperluas (tidak resmi) berikut ini: `[email protected]`, `diffie-hellman-group15-sha256`, `[email protected]`, `[email protected] `, `diffie-hellman-group16-sha256`, `[email protected]`, `[email protected]`, `[email protected] `
ssh-rsa
, ssh-dss
, ecdsa-sha2-nistp256
, ecdsa-sha2-nistp384
, ecdsa-sha2-nistp521
, ssh-ed25519
, ssh-rsa2-256
, ssh-rsa2-512
hmac-md5
, hmac-md5-96
, hmac-sha1
, hmac-sha1-96
, hmac-sha2-256
, hmac-sha2-512
, hmac-ripemd160
, [email protected]
[email protected]
, [email protected]
, [email protected]
, [email protected]
, [email protected]
, [email protected]
, [email protected]
zlib
dan [email protected]
(zlib tertunda)
pkcs5
, pkcs8
, openssh-key-v1
, [email protected]
, [email protected]
Jika Anda membutuhkan sesuatu yang tidak disertakan, tidak akan terlalu sulit untuk menambahkannya (berikan kontribusi!)
Perbandingan Implementasi SSH
Java 8 atau lebih tinggi
SLF4J 2.0.0
Kastil Goyang
Pelacak masalah: https://github.com/hierynomus/sshj/issues
Pergi!
CVE-2023-48795 yang dimitigasi - Terrapin
Digabung #917: Menerapkan ekstensi pertukaran kunci OpenSSH yang ketat
Digabung #903: Perbaikan untuk menulis string kunci host yang dikenal
Digabung #913: Mencegah buffer penerusan port jarak jauh tumbuh tanpa batas
Memindahkan tes ke JUnit5
Digabung #827: Penggantian ke ekstensi [email protected] jika tersedia
Digabung #904: Tambahkan dukungan ChaCha20-Poly1305 untuk kunci OpenSSH
Digabung #899: Tambahkan dukungan untuk kunci pribadi AES-GCM OpenSSH
Digabung #901: Memperbaiki bug kompresi ZLib
Digabung #898: Peningkatan penanganan file yang salah format untuk kunci pribadi OpenSSH
Menulis ulang tes Integrasi ke JUnit5
Digabung #851: Memperbaiki kondisi balapan dalam pertukaran kunci yang menyebabkan SSH_MSG_UNIMPLEMENTED terputus-putus
Digabung #861: Tambahkan DefaultSecurityProviderConfig dengan BouncyCastle dinonaktifkan
Digabung #881: Menulis ulang kelas pengujian ke mesin JUnit Jupiter
Digabung #880: Menghapus utilitas Socket backport Java 7
Digabung #879: Mengganti Base64 khusus dengan java.util.Base64
Digabung #852: Menghapus metode hashing kata sandi bcrypt yang tidak digunakan
Digabung #874: Versi minimum Java 8 + peningkatan ketergantungan
Digabung #876: Ubah newStatefulSFTPClient
untuk mengembalikan StatefulSFTPClient
Digabung #860: Tingkatkan ke Gradle 7.6.1
Digabung #838: Mengganti kelas Curve25519 dengan perjanjian kunci X25519
Digabung #772: Hapus ketergantungan pada jzlib
Digabung #835: Pesan TimeoutException ditingkatkan
Digabung #815: Mendukung authPassword di FreeBSD
Digabung #813: Cegah CHANNEL_CLOSE
antara isOpen dan panggilan tulis.
Digabung #811: Tambahkan Transport.isKeyExchangeREquired
untuk mencegah KEXINIT yang tidak diperlukan
Digabung #743: Gunakan kredensial klien default untuk AuthGssApiWithMic
Digabung #801: Memulihkan status interupsi thread setelah menangkap InterruptedException
Digabung #793: Gabungkan kelas PKCS5 dan PKCS8
Ketergantungan yang ditingkatkan SLF4J (1.7.36) dan Logback (1.2.11)
Digabung #791: Perbarui contoh KeepAlive
Digabung #775: Tambahkan dukungan resume SFTP
Ketergantungan yang ditingkatkan BouncyCastle (1.70)
Digabung #687: Menutup koneksi dengan benar saat menutup koneksi dari jarak jauh.
Digabung #741: Tambahkan dukungan untuk testcontainer dalam pengaturan pengujian untuk menguji lebih banyak skenario
Digabung #733: Kirim proposal kunci yang benar jika klien mengetahui kunci CA
Digabung #746: Memperbaiki bug dalam membaca file kunci pribadi Putty dengan frasa sandi
Digabung #742: Gunakan Config.keyAlgorithms untuk menentukan dukungan rsa-sha2
Digabung #754: Gunakan versi protokol SFTP untuk menyetel tanda penggantian nama FXP secara kondisional
Digabung #752: Memulai dan mengakhiri thread KeepAlive dengan benar
Digabung #753: Berikan nama thread yang lebih baik
Digabung #724: Tambahkan parameter untuk membatasi panjang pembacaan ke depan
Gabungan #763: Coba semua algoritme kunci publik untuk jenis kunci tertentu
Digabung #756: Hapus metode koneksi proxy yang tidak digunakan lagi
Digabung #770: Tambahkan dukungan untuk kunci ed25519
aes-128-cbc
Digabung #773: Memperbaiki NPE saat membaca OpenSSHKeyV1KeyFile kosong
Digabung #777: Jangan meminta terlalu banyak paket baca-depan
Kirim EOF pada penutupan saluran (Perbaikan #143, #496, #553, #554)
Digabung #726: Parsing kunci OpenSSH v1 dengan informasi CRT lengkap
Digabung #721: Lebih memilih algoritma kunci host yang dikenal untuk verifikasi kunci host
Gabungan #716, #729 dan #730: Tambahkan dukungan penuh untuk file kunci PuTTY v3.
Penggabungan #708 dan #71: Tambahkan dukungan untuk kunci pribadi PKCS#8
Digabung #703: Mendukung kunci sertifikat host
Ketergantungan yang ditingkatkan BouncyCastle (1.69), SLF4j (1.7.32), Logback (1.2.6), asn-one (0.6.0)
Digabung #702: Mendukung autentikasi kunci publik menggunakan sertifikat
Digabung #691: Perbaikan untuk menulis bilangan bulat negatif yang tidak ditandatangani ke Buffer
Digabung #682: Dukungan untuk sandi [email protected]
Digabung #680: Waktu penyimpanan yang dapat dikonfigurasi untuk transfer SCP
Ketergantungan benjolan (asn-one 0.5.0, BouncyCastle 1.68, slf4j-api 1.7.30)
Digabung #660: Mendukung kunci ED25519 dan ECDSA dalam format PuTTY
Digabung #655: Bump BouncyCastle karena CVE
Digabung #653: Jadikan kelas Parameter dapat digunakan sebagai kunci HashMap
Digabung #647: Mengurangi level log untuk pengurai identifikasi
Digabung #630: Tambahkan dukungan untuk cipher [email protected]
dan [email protected]
Digabung #636: Peningkatan kompatibilitas Android
Digabung #627: Mencegah kebocoran kunci
PERUBAHAN TERPECAHKAN : Menghapus setSignatureFactories
dan getSignatureFactories
dari Config dan menggantinya dengan getKeyAlgorithms
dan setKeyAlgorithms
Perbaikan #588: Tambahkan dukungan untuk tanda tangan ssh-rsa2-256
dan ssh-rsa2-512
Digabung #579: Perbaiki NPE di OpenSSHKnownHosts
Digabung #587: Tambahkan percobaan ulang pencari kata sandi untuk OpenSSHKeyV1KeyFile
Digabung #586: Jadikan KeyType kompatibel dengan Android Store
Digabung #593: Ubah UserAuth.getAllowedMethods()
menjadi tipe pengembalian Koleksi
Digabung #595: Izinkan membaca kunci dengan panjang sewenang-wenang
Digabung #591: Izinkan untuk menanyakan ekstensi SFTP
Digabung #603: Tambahkan metode untuk membuat klien SFTP Stateful
Digabung #605: Gunakan thread Daemon untuk menghindari pemblokiran pematian JVM
Digabung #606: Selalu gunakan JCERandom RNG secara default
Digabung #609: Hapus frasa sandi setelah digunakan untuk mencegah masalah keamanan
Digabung #618: Memperbaiki port lokal DirectConnection untuk digunakan dengan OpenSSH > 8.0
Digabung #619: Meningkatkan BouncyCastle menjadi 1.66
Digabung #622: Kirim 'ext-info-c' dengan algoritma KEX
Digabung #623: Memperbaiki pengkodean transport tanda tangan nistp521
Digabung #607: Memperbaiki kunci pub matematika ke algoritma kunci
Digabung #602: Memperbaiki penentuan kunci sertifikat RSA
Memperbaiki #415: Memperbaiki awalan '/' yang salah ke jalur di SFTPClient.mkdirs
Menambahkan dukungan untuk algoritma MAC ETM (Encrypt-then-Mac).
Memperbaiki #454: Menambahkan pemeriksaan kapasitas yang hilang untuk Buffer.putUint64
Perbaikan #466: Menambahkan batas waktu penguncian untuk tindakan jarak jauh guna mencegah pembekuan
Perbaikan #470: Menjadikan EdDSA sebagai pabrik tanda tangan default (pertama).
Perbaikan #467: Menambahkan AES256-CBC sebagai mode sandi dalam dukungan openssh-key-v1
Memperbaiki #464: Mengaktifkan [email protected] di DefaultConfig
Memperbaiki #472: Menangani permintaan global yang dimulai server
Memperbaiki #485: Menambahkan dukungan untuk semua tipe kunci ke file kunci openssh-key-v1.
Perbaikan #413: Gunakan UTF-8 untuk PrivateKeyFileResource
Perbaikan #427: Mendukung file openssh-key-v1 terenkripsi ed25519
Meningkatkan BouncyCastle menjadi 1.60
Menambahkan dukungan untuk MAC [email protected]
Menambahkan dukungan untuk hmac-ripemd160
Perbaikan #382: Memperbaiki pelolosan di WildcardHostmatcher
Menambahkan testsuite integrasi menggunakan Docker terhadap OpenSSH
Memperbaiki #187: Memperbaiki bug panjang di Buffer.putString
Perbaikan #405: Lanjutkan verifikasi host jika kunci host pertama tidak cocok.
Digabung #372: Tingkatkan ke 'net.i2p.crypto:eddsa:0.2.0'
Memperbaiki #355 dan #354: Mendekode byte tanda tangan dengan benar
Perbaikan #365: Menambahkan dukungan untuk sidik jari kunci server OpenSSH gaya baru
Memperbaiki #356: Memperbaiki deteksi jenis kunci untuk kunci publik ECDSA
Membuat SSHJ Java9 kompatibel
Perbaikan #341: Memperbaiki jalur yang berjalan selama penyalinan rekursif
Digabung #338: Menambahkan ConsolePasswordFinder untuk membaca kata sandi dari stdin
Digabung #336: Menambahkan dukungan untuk tanda tangan ecdsa-sha2-nistp384 dan ecdsa-sha2-nistp521
Memperbaiki #331: Menambahkan dukungan untuk wildcard di file unknown_hosts
Digabung #322: Memperbaiki regresi dari 40f956b (parameter panjang tidak valid pada outputstream)
Digabung #319: Menambahkan dukungan untuk file kunci sertifikat [email protected]
dan [email protected]
Meningkatkan Gradle ke 3.4.1
Digabung #305: Menambahkan dukungan untuk pengkodean string khusus
Memperbaiki #312: Meningkatkan BouncyCastle ke 1.56
Digabung #294: Referensi ED25519 dengan konstanta, bukan nama
Penggabungan #293, #295 dan #301: Memperbaiki kemasan OSGi
Menambahkan grup Diffie Hellman baru 15-18 untuk algoritma KeyExchange yang lebih kuat
Mengaktifkan file Kunci PKCS5 di DefaultConfig
Digabung #291: Memperbaiki pemuatan sshj.properties dan pesan pengecualian berantai
Digabung #284: Menangkap interupsi dengan benar di thread keepalive
Perbaikan #292: Teruskan RandomFactory yang dikonfigurasi ke Diffie Hellman KEX
Memperbaiki #256: SSHJ sekarang dibuat jika tidak ada repositori git
LocalPortForwarder sekarang dengan benar menginterupsi threadnya sendiri di close()
Perbaikan #276: Tambahkan dukungan untuk ed-25519 dan format kunci OpenSSH baru
Memperbaiki #280: Membaca versi dari file sshj.properties yang dihasilkan untuk menghasilkan versi keluaran dengan benar selama negosiasi
Memperbaiki kompatibilitas Android
Tingkatkan ke Gradle 3.0
Digabung #271: Memuat unknown_hosts tanpa memerlukan BouncyCastle
Digabung #269: Membawa kembali dukungan Java6 berdasarkan permintaan populer
Digabung #267: Menambahkan dukungan untuk pencatatan per koneksi (Perbaikan #264)
Penggabungan #262, #265 dan #266: Menambahkan dukungan file kunci PKCS5
Memperbaiki toString dari sftp FileAttributes (Perbaikan #258)
Perbaikan #255: Tidak lagi bergantung pada kelas 'yang ditandai secara pribadi' dalam paket net.i2p.crypto.eddsa.math
, memperbaiki ketergantungan OSGI
Memperlakukan baris identifikasi Server SSH yang diakhiri dengan 'n' dan bukannya 'rn' dengan lunak.
Peningkatan penguraian identifikasi Server SSH. Baris header yang terlalu panjang kini tidak lagi melanggar protokol.
Memperkenalkan perubahan besar pada perilaku penyalinan SFTP : Sebelumnya operasi penyalinan SFTP akan berperilaku berbeda jika sumber dan target adalah folder dengan nama berbeda. Dalam hal ini, alih-alih menyalin konten sumber ke direktori target, direktori itu sendiri disalin sebagai sub direktori dari direktori target. Perilaku ini telah dihapus demi perilaku default yaitu menyalin konten sumber ke target. Membawa perilaku sejalan dengan cara kerja SCP.
Memperbaiki #252 (melalui: #253): Subdir dengan nama yang sama tidak lagi digabungkan secara tidak sengaja
Perbaikan #239: Penerusan port jarak jauh tidak berfungsi jika Anda menggunakan string kosong sebagai alamat, atau alamat penampung semua.
Perbaikan #242: Menambahkan header OSGI ke manifes jar sumber
Memperbaiki #236: Penerusan Port jarak jauh dengan alokasi port dinamis gagal dengan BufferUnderflowException
Distribusi gradle ditingkatkan ke 2.12
Ditutup #234: Menghentikan dukungan Java6 (0.15.0 sudah tidak kompatibel dengan Java6 karena ketergantungan Java7)
Perbaikan #118: Menambahkan sakelar konfigurasi untuk menunggu pada identitas server sebelum mengirim identitas klien.
Memperbaiki #114: Menambahkan javadoc yang selalu perlu Anda panggil close() pada Perintah sebelum memeriksa kode keluar.
Perbaikan #237: Memperbaiki kondisi balapan jika permintaan global [email protected]
diterima langsung setelah autentikasi berhasil.
Perbaikan #220: Menambahkan dukungan untuk kunci host ssh-ed25519
Perbaikan #225: Memperbaiki bug dalam penghitungan sidik jari ECDSA yang terkadang menghasilkan sidik jari yang salah
Menambahkan arcfour
Stream Cipher dari RFC4253 dan RFC4345
Menambahkan semua Block Cipher dari RFC4344 dan RFC4253
Memperbaiki #171: Menambahkan dukungan untuk algoritma pertukaran kunci [email protected]
Menambahkan dukungan untuk algoritma pertukaran kunci ecdh-sha2-nistp256
, ecdh-sha2-nistp384
dan ecdh-sha2-nistp521
Perbaikan #167: Menambahkan dukungan untuk metode pertukaran kunci diffie-hellman-group-exchange-sha1
dan diffie-hellman-group-exchange-sha256
Perbaikan #212: Konfigurasikan pelolosan jalur untuk mengaktifkan perluasan shell agar berfungsi dengan benar
Digabung #210: RemoteFileInputStream.skip mengembalikan nilai yang salah (Perbaikan #209)
Digabung #208: Menambahkan dukungan pembatasan bandwidth SCP
Digabung #211: Membuat deteksi format keyfile lebih kuat
Digabung #199: Perbaikan untuk IndexOutOfBoundsException di ReadAheadRemoteFileInputStream, perbaikan #183
Digabung #195: Otentikasi baru didukung: gssapi-with-mic
Digabung #201: Opsi baru untuk memverifikasi algoritma pertukaran kunci yang dinegosiasikan
Digabung #196: Perbaikan untuk mencari nama host lengkap di file host yang dikenal
Menambahkan dukungan untuk proksi HTTP saat menjalankan JDK6 atau JDK7, perbaikan: #170
Digabung #186: Perbaikan untuk mendeteksi akhir aliran
Kompilasi ke JDK6, perbaikan #179 dan #185
Tutup soket dan saluran dengan benar ketika LocalPortForwarder gagal membuka dan memulai saluran (Perbaikan #175 dan #176)
Digabung #181: Panjang paket tulis tidak valid saat membaca dengan offset (Perbaikan #180)
Koordinat pakar baru com.hierynomus:sshj:0.11.0
saat @hierynomus mengambil alih sebagai pengelola SSHJ
Sistem build yang dimigrasikan ke Gradle 2.2.1
Digabung #150: Perbaikan untuk penanganan file yang salah di beberapa server SSH, perbaikan: #54, #119, #168, #169
Menjadikan jzlib
opsional dalam bundling OSGi, perbaikan: #162
Memperbaiki beberapa level log, perbaikan: #161
Digabung #156, #164, #165: Memperbaiki ukuran blok untuk hmac-sha2-256
dan hmac-sha2-512
Digabung #141: Tambahkan dukungan proxy
Digabung #157, #163: Perbaikan dokumen dan pembuatan
Meningkatkan BouncyCastle ke 1.51, perbaikan: #142
Menerapkan tetap hidup dengan deteksi penurunan koneksi, perbaikan #166