2012-06-04 9 views
31

तो मैं एक छोटा प्रोग्राम लिख रहा हूं जिसे एसएफटीपी के माध्यम से रिमोट सर्वर से कनेक्ट करने की आवश्यकता है, एक फ़ाइल खींचें, और फिर फ़ाइल को संसाधित करें। मैं यहां कुछ उत्तरों के माध्यम से जेएसएच में आया और यह कार्य के लिए बिल्कुल सही लग रहा था। अभी तक, उपयोग करने में आसान है और मुझे यह काम मिल गया है, एक मामूली चीज़ के साथ मैं ठीक करना चाहता हूं। मैं नीचे से कनेक्ट करने और फ़ाइल को खींचने के लिए निम्नलिखित कोड का उपयोग कर रहा:जावा के माध्यम से एसएफटीपी कनेक्शन अजीब प्रमाणीकरण के लिए पूछताछ

JSch jsch = new JSch(); 
    Session session = null; 
    try { 
     session = jsch.getSession("username", "127.0.0.1", 22); 
     session.setConfig("StrictHostKeyChecking", "no"); 
     session.setPassword("password"); 
     session.connect(); 

     Channel channel = session.openChannel("sftp"); 
     channel.connect(); 
     ChannelSftp sftpChannel = (ChannelSftp) channel; 
     sftpChannel.cd(REMOTE_FTP_DIR); 
     sftpChannel.lcd(INCOMING_DIR); 
     sftpChannel.get(TMP_FILE, TMP_FILE); 
     sftpChannel.exit(); 
     session.disconnect(); 
    } catch (JSchException e) { 
     e.printStackTrace(); 
    } catch (SftpException e) { 
     e.printStackTrace(); 
    } 

तो यह काम करता है और मैं फ़ाइल मिलता है। मैं इस कोड को लिनक्स सर्वर पर चला रहा हूं और जब मैं कोड जेएसएच चलाता हूं तो मुझे अपने केर्बेरोस उपयोगकर्ता नाम और पासवर्ड के लिए पूछता है। ऐसा लगता है कि:

Kerberos उपयोगकर्ता नाम [जॉर्ज]: जॉर्ज के लिए

Kerberos पासवर्ड:

मैं सिर्फ दोनों प्रश्नों के लिए दर्ज करें और फिर प्रोग्राम कोई समस्या नहीं के साथ जारी करने लगता है मारा। हालांकि मुझे इस कोड को क्रॉन कार्य के माध्यम से स्वचालित करने की आवश्यकता है और इसलिए मैं इसे दो प्रश्न पूछने के लिए प्रोग्राम को रोक नहीं रहा हूं। क्या ऐसा कुछ है जिसे मैं आपूर्ति नहीं कर रहा हूं ताकि वह यह नहीं पूछ सके? पूछने से रोकने के लिए मुझे कुछ करने की ज़रूरत है? उम्मीद है कि किसी के पास कुछ विचार हैं। धन्यवाद।

+0

भावी पीढ़ी के लिए, thuis से संबंधित हो सकता /show_bug.cgi?id=53437 – Aaron

उत्तर

64

सोचा था कि अगर कोई और इसी तरह की समस्या में भाग लेता है तो मैं यहां एक उत्तर पोस्ट करूंगा। बाहर निकलता है मुझे कोड का एक टुकड़ा याद आ रहा है जो सभी अंतर बनाता है। मैं तो बस से पहले

session.connect(); 

session.setConfig("PreferredAuthentications", 
        "publickey,keyboard-interactive,password"); 

जोड़ने के लिए की जरूरत है और अब सब कुछ पूरी तरह से काम करता है।

+0

+1 बहुत उपयोगी है। यह मुझे –

+0

में भी मदद करता है, यह खूबसूरती से काम करता है, नया साल मुबारक हो :- डी – raffian

+0

आपने मुझे बचाया, धन्यवाद :) –

5

जबकि स्वयं स्वीकार किए गए उत्तर में समाधान सही है, इसमें कोई स्पष्टीकरण नहीं है।

समस्या यह है कि ओपी के पास केर्बेरोस/जीएसएसएपीआई प्रमाणीकरण पसंदीदा (जेएसएच डिफ़ॉल्ट) के रूप में सेट है। फिर भी ओपी वास्तव में इसका उपयोग/प्रतीत नहीं होता है, क्योंकि ओपी का दावा है कि केर्बेरोस संकेतों के लिए कोई उपयोगकर्ता नाम या पासवर्ड निर्दिष्ट नहीं करना है।

समाधान को प्राथमिकता दी प्रमाणीकरण तरीकों की सूची से करबरोस/जीएसएसएपीआई (gssapi-with-mic) को निकालना है: https://issues.apache.org/bugzilla:

session.setConfig(
    "PreferredAuthentications", 
    "publickey,keyboard-interactive,password"); 
संबंधित मुद्दे