2010-06-18 46 views
26

Làm cách nào để kết nối với máy chủ SSH bằng Java? Tôi không cần/muốn một cái vỏ. Tôi chỉ muốn kết nối với máy chủ SSH và nhận nội dung, ví dụ: file.txt. Làm thế nào tôi có thể làm điều đó?Kết nối SSH với Java

Trả lời

5

Java không hỗ trợ mà natively, nhưng bạn có thể sử dụng một thư viện như JSch để làm điều đó

1

Bạn phải sử dụng thư viện của bên thứ ba - JSch là một trong số đó. Google có "Java ssh" và bạn sẽ nhận được nhiều tùy chọn khác.

1

Bạn có thể kiểm tra JSSH, thư viện Java SSH.

1

http://www.ganymed.ethz.ch/ssh2/ triển khai trình khách ssh2 trong Java. Tôi sử dụng nó để chuyển tiếp cổng.

+0

Tôi muốn mọi người không sử dụng Ganymed vì nó không còn được duy trì. – timonti

+0

@timonti vì bạn là người bảo trì? –

+0

"Xin lưu ý: ETH Zurich không duy trì mã nữa. Vui lòng truy cập trang web sau, code.google.com/p/ganymed-ssh-2/, trong trường hợp bạn cần cập nhật" –

32

Sử dụng 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);} 
    } 
    } 

đầu ra:

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

Câu trả lời hay có hiệu quả đối với tôi nhưng chỉ cần thực hiện chắc chắn đóng mọi thứ bạn mở. session.disconnect và sftpChannel.quit. –

+0

Khi gọi các nhà xây dựng các ngoại lệ sau đây được ném: 'NGHIÊM: JSF1073: se ha interceptado javax.faces.event.AbortProcessingException Durante el procesamiento de INVOKE_APPLICATION 5: UIComponent-ClientId = tipoMovimientoGrid: j_idt15, Mensaje = java.lang.ClassCircularityError: com/jcraft/jsch/JSchException java.lang.ClassCircularityError: com/jcraft/jsch/JSchException \t tại javax.faces.event.MethodExpressionActionListener.processAction (MethodExpressionActionListener.java:178) ' – Mauro

+0

nhận lỗi trong khi cố gắng kết nối máy chủ Windows: com.jcraft.jsch.JSchException: java.net.ConnectException: Kết nối bị từ chối: kết nối –

-1

Tôi sử dụng này và làm việc cho tôi

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(); 
Các vấn đề liên quan