2013-12-13 13 views
5

का उपयोग कर session.connect() पर लटकता है मैं sftp (JSCH) के माध्यम से FTP सर्वर से कनेक्ट कर रहा हूं।जेएससीएच: एसएफटीपी। पोर्ट 21

Evertime मैं पोर्ट 21 का उपयोग कर FTP सर्वर से कनेक्ट करता हूं, यह हमेशा session.connect() पर लटकता है।

यह कोई अपवाद नहीं फेंकता है। लेकिन जब मैं अन्य बंदरगाहों का उपयोग करता हूं। यह काम करता है और यह अपवाद फेंकता है।

क्या कोई तरीका है कि मैं त्रुटि पकड़ सकता हूं?

यहां मेरे कोड का एक नमूना है।

public static void main(String[] args) throws SftpException { 

    JSch jsch = new JSch(); 

    try { 

     Session session = jsch.getSession("username", "host", 21); 
     session.setConfig("StrictHostKeyChecking", "no"); 
     session.setPassword("password"); 
     session.connect(); 

     Channel channel = session.openChannel("sftp"); 
     channel.connect(); 
     ChannelSftp channelSftp = (ChannelSftp) channel; 
     session.disconnect(); 
     channelSftp.disconnect(); 

    } catch (JSchException e) { 
     log("Cannot make connection to FTP server "); 
     e.printStackTrace(); 

    } 

} 
+0

कोई अन्य बंदरगाह नहीं हैं। पोर्ट 22 एसएसएच पोर्ट है। पोर्ट 21 निश्चित रूप से नहीं है। – EJP

+0

मुझे पता है कि कोई अन्य बंदरगाह नहीं हैं। मेरी समस्या यह है कि मैं इसे अपवाद फेंकने की उम्मीद कर रहा था। लेकिन यह सिर्फ session.connect() – aeycee

उत्तर

6

क्या यह पोर्ट 22 एसएफटीपी के लिए डिफ़ॉल्ट पोर्ट हो सकता है? और पोर्ट 21 पर चल रहे एक एफ़टीपी सर्वर को यह नहीं पता होगा कि सुरक्षित एफ़टीपी के लिए वार्तालाप कैसे बातचीत करें। असल में, एसएफटीपी एसएसएच पर एफ़टीपी है।

संपादित: मुद्दा यह है कि बातचीत पूरी होने के लिए अनिश्चित काल तक प्रतीक्षा कर रही है। यह मैक्सिकन स्टैंड-ऑफ है जिसमें न तो पक्ष छोड़ रहा है। session.setTimeout()session.connect() से पहले कॉल करें, या session.connect(timeout) पर कॉल करें, कुछ उपयुक्त मूल्य (3-5 सेकंड) के साथ। मेरा मानना ​​है कि टाइमआउट मिलीसेकंड में है।

+0

में लटकता है, यह मेरी समस्या तब होती है जब उपयोगकर्ता 22 से अधिक पोर्ट को इनपुट करता है। मैं उम्मीद कर रहा था कि जेएससीएच अपवाद फेंक देगा। मेरी समस्या यह है कि यह किसी भी त्रुटि फेंक नहीं है। मैं सिर्फ सत्र में लटकता हूं। कनेक्ट()। जब मैं पोर्ट 22 का उपयोग करता हूं तो मैं सफलतापूर्वक FTP सर्वर से कनेक्ट कर सकता हूं। – aeycee

+1

उपरोक्त उत्तर संपादन देखें। – brettw

+1

बहुत बहुत धन्यवाद। अब यह काम कर रहा है। – aeycee

6

मुझे एक समान समस्या थी लेकिन सही बंदरगाह के साथ। session.connect() बस लटकता है और कुछ भी वापस नहीं करता है। जबकि अन्य कार्यक्रम सफलतापूर्वक कनेक्ट कर सकते हैं।

कारण यह था कि होस्ट अधिक प्रमाणीकरण विधियां प्रदान करता है, और हमें केवल पासवर्ड का उपयोग करने के लिए जेएसएच को इंगित करना होगा।

 java.util.Properties config = new java.util.Properties(); 
     config.put("StrictHostKeyChecking", "no"); 
     config.put("PreferredAuthentications", "password"); 
     session.setConfig(config); 
+0

मेरी समस्या यह थी कि सत्र.कनेक्शन() को एसएफटीपी से कनेक्ट करते समय प्रत्येक बार 40 सेकंड तक का समय लगेगा, इन गुणों को सेट करने के बाद यह 1-2 सेकंड में जुड़ता है। –

1

हम webMethods सर्वर से JSch चल रहे हैं। नए संस्करण में अपग्रेड करने के बाद जब हमने अपने भागीदारों में से किसी एक से कनेक्ट करने का प्रयास किया तो यह कनेक्ट चरण पर लटका हुआ है।

प्रस्तावित समाधान यहां काम नहीं कर रहा है।

com.jcraft.jsch.JSchException: प्रमाणीकरण असफल

मैं सर्वर हम उपयोगकर्ता और पासवर्ड के लिए पूछ रहा है इससे पहले कि कनेक्शन है कनेक्ट करने के लिए कोशिश कर रहे हैं ध्यान दिया है मैं यह त्रुटि प्राप्त हो गया है किया गया:

[[email protected] sftpTest]$ /opt/sag/95/sitcore/jvm/jvm/bin/java -jar  
SftpConnect.jar 
Password has been set 
Timeout has been set 
Kerberos username [sagtest]: 
Kerberos password for sagtest: 
Connected 
Channel opened 
Connected 
Session: iui-bpjobs01.itservices.lan:22:bp-xfer-int:1738666864 

Kerberos उपयोगकर्ता और पासवर्ड बिल्कुल नहीं होना चाहिए। अन्य मूल्यों को स्थापित करने के बाद PreferredAuthentications Skipping Kerberos authentication prompts with JSch

- है सब ठीक काम कर रहा है:

छोटे जांच के बाद मैं इस पृष्ठ पाया है। कोड है कि मैं जोड़ दिया है:

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

यहाँ पूर्ण उदाहरण है कि मुझे मिल गया है - हो सकता है यह किसी को मदद मिलेगी आपकी समस्या डिबग करने के लिए:

public static void main (String[] args){ 
    String serverport = "22"; 
    String serverhost = "XXXX"; 
    String username = "YYYY"; 
    String password = "ZZZZZ"; 
    int timeout = 5000; 
    try{ 
     int port = 22; 
     String sessionkey = null; 
     if(serverport != null && !serverport.trim().equals("")) 
      port = Integer.parseInt(serverport); 
     JSch jsch=new JSch(); 

     Session session=jsch.getSession(username, serverhost, port); 
     jsch.setKnownHosts(System.getProperty("user.home")+"/.ssh/known_hosts"); 

     session.setPassword(password); 
     System.out.println("Password has been set"); 
     if(timeout > 0){ 
      session.setTimeout(timeout); 
      System.out.println("Timeout has been set"); 
     } 
     session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password"); 
     System.out.println("Added PreferredAuthentications"); 
     session.connect(); 
     System.out.println("Connected"); 

     Channel channel = session.openChannel("sftp"); 
     System.out.println("Channel opened"); 
     channel.connect(); 
     System.out.println("Connected"); 
     if (channel.isConnected()){ 
      sessionkey = serverhost + ":" + serverport + ":" + username + ":" + Thread.currentThread().hashCode(); 
     } 
     System.out.println("Session: "+sessionkey); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 
0

मेरे मामले में, केवल JSch अद्यतन करने नवीनतम संस्करण (वर्तमान में 1.50) ने इस मुद्दे को ठीक किया है, ऐसा लगता है कि नवीनतम ओपनएसएसएच संस्करण 7.1 के साथ जेएसएच के पुराने संस्करणों के साथ कुंजी/ऑथ हैंडशेक में असंगतता थी।एक्स

संबंधित मुद्दे