
fork من مكتبة jsch الشهيرة
# نسخة مشتقة من JSch-0.1.55
انظر [README](https://github.com/mwiede/jsch/blob/master/README) الأصلي
[](https://github.com/mwiede/jsch/releases/latest)
[](https://maven-badges.sml.io/sonatype-central/com.github.mwiede/jsch)

## لماذا يجب عليك استخدام هذه المكتبة؟
كما شرحت في [مقالة مدونة](http://www.matez.de/index.php/2020/06/22/the-future-of-jsch-without-ssh-rsa/) النقاط الرئيسية هي:
* قام OpenSSH بتعطيل ssh-rsa افتراضيًا في [الإصدار 8.8](https://www.openssh.com/txt/release-8.8) وتحتاج إلى مكتبة تدعم rsa-sha2-256 و rsa-sha2-512.
* استبدال مباشر: فقط قم بتغيير إحداثيات التبعية وستكون جاهزًا.
* لا توجد صيانة نشطة لـ [JSch على SourceForge](https://sourceforge.net/projects/jsch/).
* البقاء متزامنًا مع ميزات OpenJDK بحيث لا حاجة لتبعيات إضافية.
## هل توجد أي وثائق؟
ليس كثيرًا. اطّلع على الكود المثال في مجلد [examples](https://github.com/mwiede/jsch/tree/master/examples). وهناك بعض صفحات الويكي، مثل [Jsch-Configuration](https://github.com/mwiede/jsch/wiki/Jsch-Configuration) و [Jsch-Logging](https://github.com/mwiede/jsch/wiki/Jsch-Logging).
## التحكم في الإصدارات
حتى `0.2.26`، اتبع التحكم في الإصدارات نظام jsch الأصلي، ومنذ `2.27.0`، انتقلنا إلى [الإصدارات الدلالية](https://semver.org)، معبّرين عن أن واجهة برمجة تطبيقات المكتبة مستقرة وتُستخدم في الإنتاج.
## كيفية استخدام هذه المكتبة كبديل لـ `com.jcraft:jsch`
تأكد من أن لديك تبعية jsch واحدة فقط في classpath. على سبيل المثال يمكنك التحقق من مخرجات `mvn dependency:tree`.
### عن طريق استبدال تبعية مافن مباشرة
استبدل
```xml
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
```
مع
```xml
<dependency>
<groupId>com.github.mwiede</groupId>
<artifactId>jsch</artifactId>
<version>2.28.0</version>
</dependency>
```
### عن طريق استبدال jsch كتبعية مافن انتقالية
عندما يكون لديك أداة (artifact) `foo:bar` تحتوي على `com.jcraft:jsch` كتبعية انتقالية، يجب إضافة `com.github.mwiede:jsch` كتبعية أخرى واستبعاد تبعية jcraft:
```xml
<dependency>
<groupId>com.github.mwiede</groupId>
<artifactId>jsch</artifactId>
<version>2.28.0</version>
</dependency>
<dependency>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<exclusions>
<exclusion>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
</exclusion>
</exclusions>
</dependency>
```
*إضافة*: يمكنك أيضًا استبعاد أي من `com.jcraft:jsch.agentproxy.jsch` أو `com.jcraft:jsch.agentproxy.core` أو `com.jcraft:jsch.agentproxy.pageant`، لأن هذه الوحدات تم دمجها في هذه النسخة المشتقة (انظر ملاحظات الإصدار [0.1.66](https://github.com/mwiede/jsch/releases/tag/jsch-0.1.66)).
## الأسئلة الشائعة
### ما هو الحد الأدنى لإصدار Java المطلوب؟
* Java 8. لمزيد من القيود، انظر الإجابة التالية.
### هل يتم دعم ssh-ed25519 و ssh-ed448 و curve25519-sha256 و curve448-sha512 و chacha20-poly1305@<!-- -->openssh.com؟
* هذه المكتبة عبارة عن [Multi-Release-jar](https://openjdk.org/jeps/238)، مما يعني أنه يمكنك استخدام ميزات معينة فقط عند استخدام إصدار أحدث من Java.
* لاستخدام ssh-ed25519 و ssh-ed448، يجب استخدام Java 15 على الأقل أو إضافة [Bouncy Castle](https://www.bouncycastle.org/java.html) (bcprov-jdk18on) إلى classpath.
* لاستخدام curve25519-sha256 و curve448-sha512، يجب استخدام Java 11 على الأقل أو إضافة [Bouncy Castle](https://www.bouncycastle.org/java.html) (bcprov-jdk18on) إلى classpath.
* لاستخدام chacha20-poly1305@<!-- -->openssh.com، يجب إضافة [Bouncy Castle](https://www.bouncycastle.org/java.html) (bcprov-jdk18on) إلى classpath.
* اعتبارًا من إصدار [0.1.66](https://github.com/mwiede/jsch/releases/tag/jsch-0.1.66)، يمكن الآن استخدام هذه الخوارزميات مع إصدارات Java الأقدم إذا تمت إضافة [Bouncy Castle](https://www.bouncycastle.org/java.html) (bcprov-jdk18on) إلى classpath.
* اعتبارًا من إصدار [0.1.72](https://github.com/mwiede/jsch/releases/tag/jsch-0.1.72)، لا يمكن استخدام chacha20-poly1305@<!-- -->openssh.com إلا إذا تمت إضافة [Bouncy Castle](https://www.bouncycastle.org/java.html) (bcprov-jdk18on) إلى classpath.
### لماذا لا تعمل مفاتيح من نوع ssh-rsa مع نسخة JSch المشتقة هذه وخادمي؟
* اعتبارًا من إصدار [0.2.0](https://github.com/mwiede/jsch/releases/tag/jsch-0.2.0)، تم تعطيل خوارزمية توقيع RSA/SHA1 افتراضيًا.
* لم يعد SHA1 يعتبر آمنًا من قبل مجتمع التشفير العام، وتسعى نسخة JSch المشتقة هذه إلى الحفاظ على خيارات آمنة للخوارزميات الافتراضية التي ستستخدمها.
* هذا أيضًا يتبع نهج مشروع OpenSSH حيث قاموا بتعطيل توقيعات RSA/SHA1 افتراضيًا اعتبارًا من [إصدار OpenSSH 8.8](https://www.openssh.com/txt/release-8.8).
* تستمر مفاتيح نوع ssh-rsa في العمل افتراضيًا مع خوارزميات التوقيع RSA/SHA256 (rsa-sha2-256) و RSA/SHA512 (rsa-sha2-512) المعرفة بواسطة [RFC 8332](https://datatracker.ietf.org/doc/html/rfc8332).
* إذا كان خادمك يدعم توقيعات RSA/SHA1 فقط وتحتاج إلى استخدامها في تطبيقك، فستحتاج إلى إعادة تمكينها يدويًا بإحدى الطرق التالية (انظر أيضًا صفحة الويكي [Jsch-Configuration](https://github.com/mwiede/jsch/wiki/Jsch-Configuration)):
* بشكل عام عن طريق إضافة "ssh-rsa" إلى الخاصيتين `jsch.server_host_key` + `jsch.client_pubkey`.
* بشكل عام عن طريق تنفيذ شيء مشابه لـ `JSch.setConfig("server_host_key", JSch.getConfig("server_host_key") + ",ssh-rsa")` + `JSch.setConfig("PubkeyAcceptedAlgorithms", JSch.getConfig("PubkeyAcceptedAlgorithms") + ",ssh-rsa")`.
* على أساس كل جلسة عن طريق تنفيذ شيء مشابه لـ `session.setConfig("server_host_key", session.getConfig("server_host_key") + ",ssh-rsa")` + `session.setConfig("PubkeyAcceptedAlgorithms", session.getConfig("PubkeyAcceptedAlgorithms") + ",ssh-rsa")`.
* إضافة "ssh-rsa" إلى ملف الإعدادات من نوع OpenSSH الخاص بك مع الكلمتين المفتاحيتين "HostKeyAlgorithms" + "PubkeyAcceptedAlgorithms" ثم استخدام فئة `OpenSSHConfig`.
### هل هذه النسخة المشتقة متوافقة 100% مع JSch الأصلي، لأن الاتصال بخادمي لم يعد يعمل!
* من أجل التوافق مع OpenSSH وتحسين الأمان، تم تغيير ترتيب خوارزميات التشفير. إذا كنت لا تزال تريد استخدام خوارزميات أقدم أو مهملة، فأنت بحاجة إلى تغيير الإعدادات. أمثلة انظر [#37](https://github.com/mwiede/jsch/issues/37)، [#40](https://github.com/mwiede/jsch/issues/40)
* لتسهيل ضبط خوارزميات التشفير، بدءًا من [0.1.65](https://github.com/mwiede/jsch/releases/tag/jsch-0.1.65)، يمكن ضبط خصائص النظام التالية عند بدء تشغيل تطبيقك:
* `jsch.kex`
* مماثل لـ `JSch.setConfig("kex", "...")`
* `jsch.server_host_key`
* مماثل لـ `JSch.setConfig("server_host_key", "...")`
* `jsch.prefer_known_host_key_types`
* مماثل لـ `JSch.setConfig("prefer_known_host_key_types", "...")`
* `jsch.enable_server_sig_algs`
* مماثل لـ `JSch.setConfig("enable_server_sig_algs", "...")`
* `jsch.cipher`
* مماثل لـ `JSch.setConfig("cipher.s2c", "...")` + `JSch.setConfig("cipher.c2s", "...")`
* `jsch.mac`
* مماثل لـ `JSch.setConfig("mac.s2c", "...")` + `JSch.setConfig("mac.c2s", "...")`
* `jsch.compression`
* مماثل لـ `JSch.setConfig("compression.s2c", "...")` + `JSch.setConfig("compression.c2s", "...")`
* `jsch.lang`
* مماثل لـ `JSch.setConfig("lang.s2c", "...")` + `JSch.setConfig("lang.c2s", "...")`
* `jsch.dhgex_min`
* مماثل لـ `JSch.setConfig("dhgex_min", "...")`
* `jsch.dhgex_max`
* مماثل لـ `JSch.setConfig("dhgex_max", "...")`
* `jsch.dhgex_preferred`
* مماثل لـ `JSch.setConfig("dhgex_preferred", "...")`
* `jsch.compression_level`
* مماثل لـ `JSch.setConfig("compression_level", "...")`
* `jsch.preferred_authentications`
* مماثل لـ `JSch.setConfig("PreferredAuthentications", "...")`
* `jsch.client_pubkey`
* مماثل لـ `JSch.setConfig("PubkeyAcceptedAlgorithms", "...")`
* `jsch.check_ciphers`
* مماثل لـ `JSch.setConfig("CheckCiphers", "...")`
* `jsch.check_macs`
* مماثل لـ `JSch.setConfig("CheckMacs", "...")`
* `jsch.check_kexes`
* مماثل لـ `JSch.setConfig("CheckKexes", "...")`
* `jsch.check_signatures`
* مماثل لـ `JSch.setConfig("CheckSignatures", "...")`
* `jsch.fingerprint_hash`
* مماثل لـ `JSch.setConfig("FingerprintHash", "...")`
* `jsch.max_auth_tries`
* مماثل لـ `JSch.setConfig("MaxAuthTries", "...")`
## مشاريع أخرى تستخدم JSch
* Jsync https://github.com/fizzed/jsync - يوفر أداة مزامنة ملفات ودلائل بسيطة وفعالة وموثوقة ونقية بلغة Java تشبه rsync،
ويمكن استخدامها برمجيًا.
* Blaze https://github.com/fizzed/blaze - طريقة لتشغيل ملفات Java كنصوص برمجية، مع ميزات قوية من SSH و SFTP وما يشبه rsync
مضمنة مباشرة.
## التغييرات منذ النسخة المشتقة:
انظر [ChangeLog.md](https://github.com/mwiede/jsch/blob/master/ChangeLog.md)