
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 ने [रिलीज़ 8.8](https://www.openssh.com/txt/release-8.8) में ssh-rsa को डिफ़ॉल्ट रूप से अक्षम कर दिया है और आपको एक ऐसी लाइब्रेरी चाहिए जो rsa-sha2-256 और rsa-sha2-512 को सपोर्ट करती हो।
* ड्रॉप-इन प्रतिस्थापन: केवल डिपेंडेंसी कोऑर्डिनेट्स बदलें और आपका काम हो गया।
* [SourceForge पर JSch](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) पर स्विच किया, जो दर्शाता है कि लाइब्रेरी API स्थिर है और प्रोडक्शन में उपयोग की जाती है।
## इस लाइब्रेरी को `com.jcraft:jsch` के प्रतिस्थापन के रूप में कैसे उपयोग करें
सुनिश्चित करें कि आपके क्लासपाथ पर केवल एक jsch डिपेंडेंसी है। उदाहरण के लिए आप `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 को ट्रांज़िटिव मेवेन डिपेंडेंसी के रूप में प्रतिस्थापित करके
जब आपके पास कोई आर्टिफैक्ट `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) की रिलीज़ नोट्स)।
## FAQ
### न्यूनतम आवश्यक 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) जोड़ना होगा।
* curve25519-sha256 और curve448-sha512 का उपयोग करने के लिए, आपको कम से कम Java 11 का उपयोग करना होगा या क्लासपाथ में [Bouncy Castle](https://www.bouncycastle.org/java.html) (bcprov-jdk18on) जोड़ना होगा।
* chacha20-poly1305@<!-- -->openssh.com का उपयोग करने के लिए, आपको क्लासपाथ में [Bouncy Castle](https://www.bouncycastle.org/java.html) (bcprov-jdk18on) जोड़ना होगा।
* [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) जोड़ा गया हो।
* [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) जोड़ा गया हो।
### ssh-rsa प्रकार की कुंजियाँ इस JSch फोर्क और मेरे सर्वर के साथ काम क्यों नहीं करतीं?
* [0.2.0](https://github.com/mwiede/jsch/releases/tag/jsch-0.2.0) रिलीज़ के अनुसार, RSA/SHA1 सिग्नेचर एल्गोरिदम डिफ़ॉल्ट रूप से अक्षम है।
* सामान्य क्रिप्टोग्राफिक समुदाय द्वारा SHA1 को अब सुरक्षित नहीं माना जाता है और यह JSch फोर्क उन डिफ़ॉल्ट एल्गोरिदम के लिए सुरक्षित विकल्पों को बनाए रखने का प्रयास करता है जिनका यह उपयोग करेगा।
* यह OpenSSH प्रोजेक्ट का अनुसरण भी करता है, जिसमें उन्होंने [OpenSSH रिलीज़ 8.8](https://www.openssh.com/txt/release-8.8) से डिफ़ॉल्ट रूप से RSA/SHA1 सिग्नेचर को अक्षम कर दिया था।
* ssh-rsa प्रकार की कुंजियाँ [RFC 8332](https://datatracker.ietf.org/doc/html/rfc8332) द्वारा परिभाषित RSA/SHA256 (rsa-sha2-256) और RSA/SHA512 (rsa-sha2-512) सिग्नेचर एल्गोरिदम के साथ डिफ़ॉल्ट रूप से कार्य करती रहती हैं।
* यदि आपका सर्वर केवल RSA/SHA1 सिग्नेचर का समर्थन करता है और आपको अपने एप्लिकेशन में उनके उपयोग की आवश्यकता है, तो आपको निम्नलिखित तरीकों में से किसी एक द्वारा उन्हें मैन्युअल रूप से पुनः सक्षम करना होगा (विकी पेज [Jsch-Configuration](https://github.com/mwiede/jsch/wiki/Jsch-Configuration) भी देखें):
* वैश्विक रूप से `jsch.server_host_key` + `jsch.client_pubkey` प्रॉपर्टीज़ में "ssh-rsa" जोड़कर।
* वैश्विक रूप से `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")` के समान कुछ निष्पादित करके।
* अपनी OpenSSH प्रकार की कॉन्फ़िग फ़ाइल में "HostKeyAlgorithms" + "PubkeyAcceptedAlgorithms" कीवर्ड के साथ "ssh-rsa" जोड़कर और फिर `OpenSSHConfig` क्लास का उपयोग करके।
### क्या यह फोर्क मूल JSch के साथ 100% संगत है, क्योंकि मेरे सर्वर से कनेक्शन अब काम नहीं करता!
* 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)