java - JSch SFTP लाइब्रेरी का उपयोग करते समय जावा अज्ञातहॉस्टके को कैसे हल करें?




ssh public-key (2)

jsch संस्करण: 0.1.55

मेरी समस्या हल करके

ssh-keyscan -t rsa <HOST_NAME> >> ~/.ssh/known_hosts
ssh-keyscan -t rsa <IP_ADDRESS_OF_HOST_NAME> >> ~/.ssh/known_hosts

** मेरे मामले में jsch ज्ञात_होस्ट्स फ़ाइल में आईपी पते की तलाश में था

jsch.setKnownHosts(System.getProperty("user.home")+"/.ssh/known_hosts");

मैं जावा प्रोग्राम चला रहा हूं, जहां मैं जावा SFTP का उपयोग करके एक फ़ाइल को दूसरे फ़ोल्डर में स्थानांतरित करता हूं। समस्या यह है कि मुझे अपने Java SFTP (JSch का उपयोग करके) में निम्न त्रुटि हो रही है:

C: \ Oracle \ Middleware \ Oracle_Home \ oracle_common \ jdk \ bin \ javaw.exe -server -classpath C: \ JDeveloper \ mywork \ Java_Hello_World_adf; C: \ JDeveloper \ mywork \ Java_Hello_World \ Client \ classes; उपयोगकर्ता; \ ADMIN \ डाउनलोड \ jsch-0.1.53.jar -Djavax.net.ssl.trustStore = C: \ Users \ IBM_AD ~ 1 \ AppData \ Local \ Temp \ TrustStore5840793204189742395.jks FileTransfer com.jcraft.jsch.JschException: अज्ञात। 127.0.0.1। RSA कुंजी फिंगरप्रिंट a2: 39: 3f: 44: 88: e9: 1f: d7: d1: 71: f4: 85: 98: fb: 90: dc com.jcraft.jsch.Session.heckHost (Session.java: 797) com.jcraft.jsch.Session.connect (Session.java:342) पर com.jcraft.jsch.Session.connect (Session.java:183) FileTransfer.ain (FileTransfer.java:33) प्रक्रिया के साथ बाहर निकल गया। निकास कोड ०।

निम्नलिखित मेरा अब तक का कोड है:

FileTransfer fileTransfer = new FileTransfer();              

JSch jsch = new JSch();

try {

    String host = "127.0.0.1";
    int port = 22;

    String user = "user";
    Session session = jsch.getSession(user, host, port);      
    session = jsch.getSession("username", "127.0.0.1", 22);
    session.connect();  // bug here , java.net.ConnectException

    ChannelSftp sftp = null;
    sftp = (ChannelSftp)session.openChannel("sftp") ; //channel;

    //extra config code
    java.util.Properties config = new java.util.Properties(); 
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    // end extra config code

    sftp.rename("C:\\Users\\ADMIN\\Desktop\\Work\\ConnectOne_Bancorp\\Java_Work\\SFTP_1\\house.bmp", "C:\\Users\\ADMIN\\Desktop\\Work\\ConnectOne_Bancorp\\Java_Work\\SFTP_2\\house.bmp");  
    session.disconnect();

} catch (JSchException e) {
    e.printStackTrace();  
} catch (SftpException e) {
    e.printStackTrace();
} //end-catch

मेरा साइग्विन स्थापित है, और मैंने जाँच की ( netstat -a -b ) कि यह चल रहा है।


आप StrictHostKeyChecking को no सेट करके एक होस्ट कुंजी जाँच को छोड़ने का प्रयास कर रहे हैं।

लेकिन आपको यह करना होगा कि चेकिंग से पहले, यानी session.connect() से पहले session.connect()

वैसे भी, आपको ऐसा कभी नहीं करना चाहिए, जब तक आप सुरक्षा की परवाह नहीं करते हैं। मेजबान कुंजी की जाँच आपको बीच-बीच में होने वाले हमलों से बचाने के लिए होती है।

इसके बजाय, जेएसच को सत्यापित करने देने के लिए एक अपेक्षित होस्ट कुंजी सेट करें।

उदाहरण के लिए:

  • JSch.setKnownHosts को JSch.setKnownHosts .ssh/known_hosts -समान फ़ाइल का पथ प्रदान करें।

    ssh-keyscan फ़ाइल जनरेट करने के लिए, आप OpenSSH से ssh-keyscan कमांड का उपयोग कर सकते हैं। यदि आप एक * निक्स सर्वर से कनेक्ट कर रहे हैं, तो आपके पास कमांड उपलब्ध होना चाहिए, बस चलाएं

    ssh-keyscan example.com > known_hosts

    इसका एक प्रारूप होगा जैसे:

    example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0hVqZOvZ7yWgie9OHdTORJVI5fJJoH1yEGamAd5G3werH0z7e9ybtq1mGUeRkJtea7bzru0ISR0EZ9HIONoGYrDmI7S+BiwpDBUKjva4mAsvzzvsy6Ogy/apkxm6Kbcml8u4wjxaOw3NKzKqeBvR3pc+nQVA+SJUZq8D2XBRd4EDUFXeLzwqwen9G7gSLGB1hJkSuRtGRfOHbLUuCKNR8RV82i3JvlSnAwb3MwN0m3WGdlJA8J+5YAg4e6JgSKrsCObZK7W1R6iuyuH1zA+dtAHyDyYVHB4FnYZPL0hgz2PSb9c+iDEiFcT/lT4/dQ+kRW6DYn66lS8peS8zCJ9CSQ==

    और अपने JSch कोड में जनरेट की गई ज्ञात_होस्ट फ़ाइल का संदर्भ लें।

    यदि आप विंडोज पर हैं, तो आप Win32-OpenSSH प्रोजेक्ट या विंडोज के लिए Git से ssh-keyscan का विंडोज बिल्ड प्राप्त कर सकते हैं।

  • अपेक्षित मेजबान कुंजी (जैसे आपके अन्य क्रेडेंशियल्स) के रूप में प्रदान करने के लिए JSch.getHostKeyRepository().add()

    सार्वजनिक कुंजी से .pub प्रारूप में JSch HostKey उदाहरण बनाना देखें।







public-key