2010-06-18 9 views
26

मैं जावा में किसी एसएसएच सर्वर से कैसे कनेक्ट कर सकता हूं? मुझे एक खोल चाहिए/नहीं चाहिए। मैं सिर्फ एसएसएच सर्वर से कनेक्ट करना चाहता हूं और कह सकता हूं, file.txt। मैं उसे कैसे कर सकता हूँ?जावा के साथ एसएसएच कनेक्शन

उत्तर

5

जावा कि मूल रूप से समर्थन नहीं करता है, लेकिन आप JSch की तरह एक पुस्तकालय का उपयोग कर सकते करने के लिए यह

1

आपको किसी तृतीय-पक्ष लाइब्रेरी का उपयोग करना होगा - JSch उनमें से एक है। Google "Java ssh" के साथ Google और आपको कई अन्य विकल्प मिलेंगे।

1

आप JSSH देख सकते हैं, जो एक जावा एसएसएच लाइब्रेरी है।

1

http://www.ganymed.ethz.ch/ssh2/ जावा में एक ssh2 क्लाइंट लागू करता है। मैं पोर्ट अग्रेषण के लिए इसका इस्तेमाल करता हूं।

+0

के लिए काम किया है, क्योंकि यह नहीं रह गया है मैं पसंद करेंगे लोग Ganymed का उपयोग नहीं करते बनाए रखा। – timonti

+0

@ टिमोंटोई क्योंकि आप रखरखाव थे? –

+0

"कृपया ध्यान दें: ETH ज़्यूरिख अब कोड को बनाए रखता नहीं है। अगर आपको अपडेट की आवश्यकता है तो कृपया निम्नलिखित वेबसाइट, code.google.com/p/ganymed-ssh-2/ पर जाएं," –

32

उपयोग JSch

import com.jcraft.jsch.ChannelSftp; 
import com.jcraft.jsch.JSch; 
import com.jcraft.jsch.Session; 
import java.io.*; 

/** 
* 
* @author World 
*/ 
public class SSHReadFile 
    { 
    public static void main(String args[]) 
    { 
    String user = "john"; 
    String password = "mypassword"; 
    String host = "192.168.100.23"; 
    int port=22; 

    String remoteFile="/home/john/test.txt"; 

    try 
     { 
     JSch jsch = new JSch(); 
     Session session = jsch.getSession(user, host, port); 
      session.setPassword(password); 
      session.setConfig("StrictHostKeyChecking", "no"); 
     System.out.println("Establishing Connection..."); 
     session.connect(); 
      System.out.println("Connection established."); 
     System.out.println("Crating SFTP Channel."); 
     ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp"); 
     sftpChannel.connect(); 
     System.out.println("SFTP Channel created."); 


     InputStream out= null; 
     out= sftpChannel.get(remoteFile); 
     BufferedReader br = new BufferedReader(new InputStreamReader(out)); 
     String line; 
     while ((line = br.readLine()) != null) 
      System.out.println(line); 
     br.close(); 
     } 
    catch(Exception e){System.err.print(e);} 
    } 
    } 

उत्पादन:

Establishing Connection... 
Connection established. 
Crating SFTP Channel. 
SFTP Channel created. 
This is content from file /home/john/test.txt 
+0

ग्रेट उत्तर मेरे लिए काम करता है लेकिन बस आप जो कुछ भी खोलते हैं उसे बंद करना सुनिश्चित करें। session.disconnect और sftpChannel.quit। –

+0

जब कन्स्ट्रक्टर का आह्वान किया जाता है तो निम्नलिखित अपवाद फेंक दिया जाता है: 'ग्रैव: जेएसएफ 1073: से हा इंटरसेप्टैडो javax.faces.event.AbortProcessingException durante el procesamiento de INVOKE_APPLICATION 5: यूआईसीओम्पोनेंट-क्लाइंटआईडी = टिपोमोविमिएंटियोग्रिड: j_idt15, मेन्साजे = java.lang.ClassCircularity त्रुटि: कॉम/jcraft/jsch/JSchException java.lang.ClassCircularityError: com/jcraft/jsch/JSchException \t javax.faces.event.MethodExpressionActionListener.processAction (MethodExpressionActionListener.java:178) ' – Mauro

+0

विंडोज़ सर्वर कनेक्ट करते समय त्रुटि हो रही है: com.jcraft.jsch.JSchException: java.net.ConnectException: कनेक्शन से इनकार कर दिया: कनेक्ट –

-1

मैं इस का इस्तेमाल किया और मुझे

Channel channel=session.openChannel("exec"); 
String command = "Your Command here"; 
((ChannelExec)channel).setCommand(command); 

InputStream in=channel.getInputStream(); 
((ChannelExec)channel).setErrStream(System.err); 
channel.connect();