تحذير | إصدارات SSHJ التي تصل إلى 0.37.0 وتتضمنها تكون عرضة للتهديد CVE-2023-48795 - Terrapin. يرجى الترقية إلى 0.38.0 أو أعلى. |
للبدء، قم بإلقاء نظرة على أحد الأمثلة. نأمل أن تجد واجهة برمجة التطبيقات (API) ممتعة للعمل معها :)
للحصول على SSHJ، لديك خياران:
أضف تبعية إلى SSHJ إلى مشروعك.
قم ببناء SSHJ بنفسك.
وإذا أردت، يمكنك أيضًا تشغيل أمثلة SSHJ.
لا يتم توفير الإصدارات الثنائية لـ SSHJ هنا، ولكن يمكنك تنزيلها مباشرة من مستودع Maven المركزي إذا كنت ترغب في ذلك.
إذا كنت تقوم بإنشاء مشروعك باستخدام Maven، فيمكنك إضافة التبعية التالية إلى pom.xml
:
< dependency >
< groupId >com.hierynomus</ groupId >
< artifactId >sshj</ artifactId >
< version >0.38.0</ version >
</ dependency >
إذا تم إنشاء مشروعك باستخدام أداة بناء أخرى تستخدم مستودع Maven المركزي، فقم بترجمة هذه التبعية إلى التنسيق الذي تستخدمه أداة البناء الخاصة بك.
استنساخ مستودع SSHJ.
تأكد من تثبيت Java6 مع ملحقات تشفير Java غير المحدودة (JCE).
قم بتشغيل الأمر ./gradlew clean build
.
يوجد في دليل examples
مشروع Maven منفصل يوضح كيفية استخدام المكتبة في بعض الحالات النموذجية. إذا كنت تريد تشغيلها، فاتبع الإرشادات التالية:
قم بتثبيت Maven 2.2.1 أو الأحدث.
استنساخ مستودع SSHJ.
انتقل إلى دليل examples
وقم بتشغيل الأمر mvn eclipse:eclipse
.
قم باستيراد مشروع examples
إلى Eclipse.
قم بتغيير تفاصيل تسجيل الدخول في فئات الأمثلة (العنوان واسم المستخدم وكلمة المرور) وقم بتشغيلها!
قراءة ملفاتknown_hosts للتحقق من مفتاح المضيف
المفتاح العام وكلمة المرور والمصادقة التفاعلية للوحة المفاتيح
قنوات الأوامر والنظام الفرعي وقنوات الصدفة
إعادة توجيه المنفذ المحلي والبعيد
تنفيذ scp + إصدار sftp الكامل 0-3
تم تضمين التطبيقات/المحولات للخوارزميات التالية:
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 أيضًا الأصفار الموسعة (غير الرسمية) التالية: 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 أيضًا خوارزميات تبادل المفاتيح الموسعة (غير الرسمية): `[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- hmac-sha2-256
، hmac- hmac-sha2-512
، hmac-ripemd160
، [email protected]
[email protected]
، [email protected]
، [email protected]
، [email protected]
، [email protected]
، [email protected]
، [email protected]
zlib
و [email protected]
(تأخير zlib)
pkcs5
، pkcs8
، openssh-key-v1
، [email protected]
، [email protected]
إذا كنت بحاجة إلى شيء لم يتم تضمينه، فلا ينبغي أن يكون من الصعب جدًا إضافته (ساهم به!)
مقارنة تنفيذ SSH
جافا 8 أو أعلى
SLF4J 2.0.0
قلعة نطاطة
تعقب المشكلة: https://github.com/hierynomus/sshj/issues
شوكة بعيدا!
CVE-2023-48795 مخفف - تيرابين
تم الدمج رقم 917: تنفيذ ملحق تبادل المفاتيح الصارم OpenSSH
تم الدمج رقم 903: إصلاح مشكلة كتابة سلسلة مفاتيح المضيفين المعروفين
تم الدمج #913: منع تزايد المخازن المؤقتة لإعادة توجيه المنفذ البعيد بلا حدود
تم نقل الاختبارات إلى JUnit5
تم دمج #827: الرجوع إلى ملحق [email protected] إذا كان متاحًا
دمج #904: إضافة دعم ChaCha20-Poly1305 لمفاتيح OpenSSH
دمج #899: إضافة دعم للمفاتيح الخاصة AES-GCM OpenSSH
تم دمجها رقم 901: إصلاح خطأ ضغط ZLib
مدمج #898: معالجة محسنة للملفات المشوهة لمفاتيح OpenSSH الخاصة
إعادة كتابة اختبارات التكامل إلى JUnit5
مدمج رقم 851: إصلاح حالة السباق في تبادل المفاتيح مما يتسبب في SSH_MSG_UNIMPLEMENTED المتقطع
تم دمج #861: إضافة DefaultSecurityProviderConfig مع تعطيل BouncyCastle
تم الدمج رقم 881: إعادة كتابة فئات الاختبار إلى محرك JUnit Jupiter
تم الدمج رقم 880: تمت إزالة أدوات مقبس المنفذ الخلفي لـ Java 7
تم الدمج رقم 879: تم استبدال Base64 المخصص بـ java.util.Base64
مدمج #852: تمت إزالة طرق تجزئة كلمة مرور bcrypt غير المستخدمة
تم الدمج رقم 874: الحد الأدنى لإصدار Java 8 + ترقيات التبعية
تم دمج #876: قم بتغيير newStatefulSFTPClient
لإرجاع StatefulSFTPClient
تم الدمج رقم 860: الترقية إلى Gradle 7.6.1
تم الدمج رقم 838: تم استبدال فئة Curve25519 باتفاقية المفتاح X25519
مدمج #772: إزالة التبعية على jzlib
مدمج #835: تحسين رسالة TimeoutException
تم الدمج رقم 815: دعم authPassword على FreeBSD
تم الدمج رقم 813: منع CHANNEL_CLOSE
بين isOpen وكتابة المكالمة.
تم دمج #811: إضافة Transport.isKeyExchangeREquired
لمنع KEXINIT غير الضرورية
مدمج #743: استخدم بيانات اعتماد العميل الافتراضية لـ AuthGssApiWithMic
تم دمج #801: استعادة حالة مقاطعة مؤشر الترابط بعد التقاط InterruptedException
تم الدمج رقم 793: دمج فئتي PKCS5 وPKCS8
التبعيات التي تمت ترقيتها SLF4J (1.7.36) وLogback (1.2.11)
مدمج #791: تحديث أمثلة KeepAlive
مدمج #775: إضافة دعم استئناف SFTP
التبعيات التي تمت ترقيتها BouncyCastle (1.70)
تم دمج #687: إغلاق الاتصال بشكل صحيح عند إغلاق الاتصال عن بعد.
مدمج #741: إضافة دعم لحاويات الاختبار في إعداد الاختبار لاختبار المزيد من السيناريوهات
دمج #733: إرسال اقتراح المفتاح الصحيح إذا كان العميل يعرف مفتاح CA
تم دمجها #746: إصلاح الخلل في قراءة ملف المفتاح الخاص المعجون مع عبارة المرور
دمج #742: استخدم Config.keyAlgorithms لتحديد دعم rsa-sha2
مدمج #754: استخدم إصدار بروتوكول SFTP لتعيين إشارات إعادة تسمية FXP بشكل مشروط
تم دمجها #752: بدء وإنهاء سلسلة رسائل KeepAlive بشكل صحيح
تم الدمج #753: تقديم أسماء أفضل للموضوع
تم دمج #724: إضافة معلمة لتحديد طول القراءة المسبقة
مدمج #763: جرب جميع خوارزميات المفاتيح العامة لنوع مفتاح محدد
مدمج #756: إزالة طرق اتصال الوكيل المهملة
مدمج #770: إضافة دعم لمفاتيح ed25519
aes-128-cbc
مدمج #773: إصلاح NPE عند قراءة ملف OpenSSHKeyV1KeyFile الفارغ
مدمج #777: لا تطلب الكثير من حزم القراءة المسبقة
إرسال EOF عند إغلاق القناة (الإصلاحات #143، #496، #553، #554)
مدمج #726: تحليل مفاتيح OpenSSH v1 مع وجود معلومات CRT الكاملة
مدمج #721: تفضيل خوارزمية مفتاح المضيف المعروفة للتحقق من مفتاح المضيف
دمج #716 و#729 و#730: إضافة دعم كامل لملفات مفاتيح PuTTY v3.
دمج #708 و#71: إضافة دعم للمفاتيح الخاصة PKCS#8
مدمج #703: دعم مفاتيح شهادة المضيف
التبعيات التي تمت ترقيتها BouncyCastle (1.69)، SLF4j (1.7.32)، Logback (1.2.6)، asn-one (0.6.0)
مدمج #702: دعم مصادقة المفتاح العام باستخدام الشهادات
مدمج #691: إصلاح مشكلة كتابة الأعداد الصحيحة السالبة غير الموقعة في المخزن المؤقت
مدمج #682: دعم تشفير [email protected]
مدمج #680: حفظ mtimes قابل للتكوين لعمليات نقل SCP
تبعيات نتوء (asn-one 0.5.0، BouncyCastle 1.68، slf4j-api 1.7.30)
مدمج #660: دعم مفاتيح ED25519 وECDSA بتنسيق PuTTY
تم دمج #655: Bump BouncyCastle بسبب CVE
دمج #653: جعل فئة المعلمات قابلة للاستخدام كمفتاح HashMap
مدمج #647: تقليل مستوى السجل لمحلل التعريف
مدمج رقم 630: إضافة دعم لشفرات [email protected]
و [email protected]
تم الدمج رقم 636: تحسين التوافق مع Android
مدمج #627: منع تسرب المفاتيح
تغيير جذري : تمت إزالة setSignatureFactories
و getSignatureFactories
من التكوين وتبديلهما إلى getKeyAlgorithms
و setKeyAlgorithms
اصلاح #588: إضافة دعم لتوقيعات ssh-rsa2-256
و ssh-rsa2-512
مدمج رقم 579: إصلاح NPE في OpenSSHKnownHosts
تم دمج #587: قم بإعادة محاولة إضافة أداة البحث عن كلمة المرور لـ OpenSSHKeyV1KeyFile
تم الدمج #586: جعل KeyType متوافقًا مع متجر Android
تم دمج #593: قم بتغيير UserAuth.getAllowedMethods()
إلى نوع إرجاع المجموعة
مدمج #595: السماح بقراءة مفاتيح الطول العشوائية
مدمج #591: السماح بالاستعلام عن امتدادات SFTP
تم الدمج #603: إضافة طريقة لإنشاء عميل SFTP ذو حالة
تم دمج #605: استخدم سلاسل Daemon لتجنب منع إيقاف تشغيل JVM
مدمج #606: استخدم دائمًا JCErandom RNG بشكل افتراضي
مدمج #609: مسح عبارة المرور بعد الاستخدام لمنع حدوث مشكلات أمنية
مدمج #618: إصلاح المنفذ المحلي لـ DirectConnection للاستخدام مع OpenSSH > 8.0
تم الدمج رقم 619: تمت ترقية BouncyCastle إلى الإصدار 1.66
تم الدمج رقم 622: إرسال "ext-info-c" باستخدام خوارزميات KEX
مدمج #623: إصلاح ترميز النقل لتوقيعات nistp521
تم الدمج رقم 607: إصلاح المفاتيح العامة الرياضية في الخوارزميات الرئيسية
مدمج #602: إصلاح تحديد مفتاح شهادة RSA
اصلاح رقم 415: تم إصلاح البادئة '/' بشكل خاطئ للمسار في SFTPClient.mkdirs
تمت إضافة دعم لخوارزميات MAC ETM (تشفير ثم Mac).
اصلاح #454: تمت إضافة فحص السعة المفقودة لـ Buffer.putUint64
اصلاح #466: تمت إضافة مهلة القفل للعمل عن بعد لمنع التعليق
اصلاح #470: جعل EdDSA هو مصنع التوقيع الافتراضي (الأول).
اصلاح #467: تمت إضافة AES256-CBC كوضع تشفير في دعم opensh-key-v1
اصلاح رقم 464: تمكين المنحنى [email protected] في التكوين الافتراضي
اصلاح #472: التعامل مع الطلبات العامة التي بدأها الخادم
اصلاح #485: تمت إضافة دعم لجميع أنواع المفاتيح لفتح ملفات المفاتيح sh-key-v1.
اصلاح رقم 413: استخدام UTF-8 لـ PrivateKeyFileResource
اصلاح #427: دعم ملفات ed25519 المشفرة لفتح ملفات sh-key-v1
تمت ترقية BouncyCastle إلى 1.60
تمت إضافة دعم لـ [email protected] MAC
تمت إضافة دعم لـ hmac-ripemd160
اصلاح رقم 382: تم إصلاح الهروب في WildcardHostmatcher
تمت إضافة مجموعة اختبار التكامل باستخدام Docker مقابل OpenSSH
اصلاح #187: خطأ ثابت في الطول في Buffer.putString
اصلاح #405: متابعة التحقق من المضيف إذا كان مفتاح المضيف الأول غير متطابق.
مدمج رقم 372: الترقية إلى 'net.i2p.crypto:eddsa:0.2.0'
تم الإصلاح رقم 355 ورقم 354: فك تشفير بايتات التوقيع بشكل صحيح
اصلاح #365: تمت إضافة دعم لبصمات OpenSSH ذات النمط الجديد لمفاتيح الخادم
اصلاح #356: اكتشاف نوع المفتاح الثابت للمفاتيح العامة لـ ECDSA
جعل SSHJ Java9 متوافقًا
اصلاح #341: مسار ثابت للمشي أثناء النسخ العودي
دمج #338: تمت إضافة ConsolePasswordFinder لقراءة كلمة المرور من stdin
مدمج رقم 336: تمت إضافة دعم لتوقيعات ecdsa-sha2-nistp384 وecdsa-sha2-nistp521
اصلاح #331: تمت إضافة دعم لأحرف البدل في ملفknown_hosts
مدمج #322: إصلاح الانحدار من 40f956b (معلمة طول غير صالحة في تيار الإخراج)
مدمج #319: تمت إضافة دعم لملفات مفاتيح الشهادات [email protected]
و [email protected]
ترقية Gradle إلى 3.4.1
دمج #305: تمت إضافة دعم لترميز السلسلة المخصصة
اصلاح رقم 312: ترقية BouncyCastle إلى 1.56
دمج #294: المرجع ED25519 بالثابت بدلاً من الاسم
تم دمج الأرقام 293 و295 و301: تغليف OSGi الثابت
تمت إضافة مجموعات Diffie Hellman الجديدة 15-18 للحصول على خوارزميات KeyExchange أقوى
تمكين ملفات مفتاح PKCS5 في DefaultConfig
مدمج #291: تم إصلاح تحميل sshj.properties ورسائل الاستثناء المتسلسلة
تم دمجها #284: التقاط المقاطعة بشكل صحيح في سلسلة رسائل Keepalive
اصلاح رقم 292: تمرير RandomFactory الذي تم تكوينه إلى Diffie Hellman KEX
اصلاح رقم 256: يتم الآن إنشاء SSHJ في حالة عدم وجود مستودع git
يقوم LocalPortForwarder الآن بمقاطعة مؤشر الترابط الخاص به بشكل صحيح عند الإغلاق ()
اصلاح #276: إضافة دعم لـ ed-25519 وتنسيق مفتاح OpenSSH الجديد
اصلاح #280: قراءة الإصدار من ملف sshj.properties الذي تم إنشاؤه لإخراج الإصدار بشكل صحيح أثناء التفاوض
توافق أندرويد ثابت
الترقية إلى Gradle 3.0
مدمج #271: قم بتحميل المضيفين المعروفين دون الحاجة إلى BouncyCastle
تم الدمج رقم 269: تمت إعادة دعم Java6 بناءً على الطلب الشعبي
مدمج رقم 267: تمت إضافة دعم لتسجيل كل اتصال (الإصلاحات رقم 264)
دمج #262 و#265 و#266: تمت إضافة دعم ملف مفتاح PKCS5
تم إصلاح سلسلة سمات ملف sftp (الإصلاحات رقم 258)
اصلاح رقم 255: لم يعد يعتمد على الفئات "المحددة بشكل خاص" في حزمة net.i2p.crypto.eddsa.math
، ويصلح تبعيات OSGI
التعامل مع سطر تعريف خادم SSH المنتهي بـ 'n' بدلاً من 'rn' بلطف.
تحسين تحليل تعريف خادم SSH. لم تعد أسطر الرأس الطويلة جدًا تكسر البروتوكول.
تم تقديم تغيير جذري في سلوك نسخ SFTP : في السابق، كانت عملية نسخ SFTP تتصرف بشكل مختلف إذا كان كل من المصدر والهدف عبارة عن مجلدات بأسماء مختلفة. في هذه الحالة، بدلاً من نسخ محتويات المصدر إلى الدليل الهدف، تم نسخ الدليل نفسه كدليل فرعي للدليل الهدف. تمت إزالة هذا السلوك لصالح السلوك الافتراضي وهو نسخ محتويات المصدر إلى الهدف. جعل السلوك يتماشى مع كيفية عمل SCP.
اصلاح #252 (عبر: #253): لم يعد يتم دمج العناوين الفرعية ذات الاسم نفسه عن طريق الصدفة
اصلاح #239: إعادة توجيه المنفذ البعيد لا تعمل إذا استخدمت السلسلة الفارغة كعنوان، أو عنوان استقبال الرسائل الخاطئة.
اصلاح رقم 242: تمت إضافة رؤوس OSGI إلى بيان جرة المصادر
اصلاح #236: فشل إعادة توجيه المنفذ عن بعد مع تخصيص المنفذ الديناميكي مع BufferUnderflowException
ترقية توزيع gradle إلى 2.12
تم الإغلاق رقم 234: تم إسقاط دعم Java6 (كان 0.15.0 بالفعل غير متوافق مع Java6 بسبب تبعية Java7)
اصلاح #118: تمت إضافة مفتاح التكوين لانتظار معرف الخادم قبل إرسال معرف العميل.
اصلاح #114: تمت إضافة javadoc الذي تحتاج دائمًا إلى الاتصال به Close() على أمر قبل فحص رموز الخروج.
اصلاح رقم 237: تم إصلاح حالة السباق إذا تم استلام طلب عام [email protected]
مباشرة بعد المصادقة الناجحة.
اصلاح #220: تمت إضافة دعم لمفاتيح مضيف ssh-ed25519
اصلاح #225: تم إصلاح الخلل في حساب بصمة ECDSA الذي أدى في بعض الأحيان إلى إنتاج بصمة غير صحيحة
تمت إضافة تشفير تيار arcfour
من RFC4253 وRFC4345
تمت إضافة كافة الأصفار الكتلية من RFC4344 وRFC4253
اصلاح رقم 171: تمت إضافة دعم لخوارزمية تبادل المفاتيح [email protected]
تمت إضافة دعم لخوارزميات تبادل المفاتيح ecdh-sha2-nistp256
و ecdh-sha2-nistp384
و ecdh-sha2-nistp521
اصلاح رقم 167: تمت إضافة دعم لطرق تبادل المفاتيح diffie-hellman-group-exchange-sha1
و diffie-hellman-group-exchange-sha256
اصلاح #212: تكوين مسار الهروب لتمكين توسيع الصدفة للعمل بشكل صحيح
تم دمجها رقم 210: يقوم RemoteFileInputStream.skip بإرجاع قيمة خاطئة (الإصلاحات رقم 209)
دمج #208: تمت إضافة دعم تقييد عرض النطاق الترددي SCP
مدمج #211: جعل الكشف عن تنسيق الملف الرئيسي أكثر قوة
تم دمجها رقم 199: إصلاح مشكلة IndexOutOfBoundsException في ReadAheadRemoteFileInputStream، الإصلاحات رقم 183
مدمج #195: المصادقة الجديدة المدعومة: gssapi-with-mic
دمج #201: خيار جديد للتحقق من خوارزميات تبادل المفاتيح المتفاوض عليها
تم دمجها #196: إصلاح مشكلة البحث عن اسم المضيف الكامل في ملف المضيفين المعروفين
تمت إضافة دعم لوكلاء HTTP عند تشغيل JDK6 أو JDK7، الإصلاحات: #170
تم الدمج #186: إصلاح اكتشاف نهاية الدفق
التجميع إلى JDK6، إصلاحات رقم 179 ورقم 185
إغلاق المقبس والقناة بشكل صحيح عندما يفشل LocalPortForwarder في فتح القناة وبدء تشغيلها (الإصلاحات رقم 175 و#176)
دمج #181: طول حزمة الكتابة غير صالح عند القراءة مع الإزاحة (الإصلاحات #180)
إحداثيات maven الجديدة com.hierynomus:sshj:0.11.0
حيث تولى @hierynomus منصب مشرف SSHJ
تم ترحيل نظام البناء إلى Gradle 2.2.1
دمج #150: إصلاح التعامل غير الصحيح مع الملفات على بعض خوادم SSH، الإصلاحات: #54، #119، #168، #169
جعل jzlib
اختياريًا في حزمة OSGi، الإصلاحات: #162
تحسين بعض مستويات السجل، الإصلاحات: #161
دمج #156، #164، #165: أحجام الكتل الثابتة لـ hmac-sha2-256
و hmac-sha2-512
مدمج #141: إضافة دعم الوكيل
تم الدمج رقم 157 ورقم 163: إصلاحات المستند والإنشاء
تمت ترقية BouncyCastle إلى الإصدار 1.51، الإصلاحات: #142
تم تنفيذ ميزة البقاء على قيد الحياة مع اكتشاف انقطاع الاتصال، الإصلاحات رقم 166