2010-06-18 3 views
26

Как подключиться к серверу SSH в Java? Мне не нужна/нужна оболочка. Я просто хочу подключиться к серверу SSH и получить содержимое, скажем, file.txt. Как я могу это сделать?SSH-соединение с Java

ответ

5

Java не поддерживает, что изначально, но вы можете использовать библиотеку как JSch сделать это

1

Вы должны использовать стороннюю библиотеку - JSch является одним из них. Google с «Java ssh», и вы получите множество других опций.

1

Вы можете проверить JSSH, являющийся библиотекой Java SSH.

1

http://www.ganymed.ethz.ch/ssh2/ реализует клиент ssh2 на Java. Я использую его для переадресации портов.

+0

Я предпочел бы люди не используют Ганимед, так как он больше не является поддерживается. – timonti

+0

@ timonti, потому что вы были сопровождающим? –

+0

«Обратите внимание: ETH Zurich больше не поддерживает код. Посетите следующий веб-сайт, 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

При вызове конструктора выбрано следующее исключение: 'GRAVE: 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 at javax.faces.event.MethodExpressionActionListener.processAction (MethodExpressionActionListener.java:178) ' – Mauro

+0

получение ошибки при попытке подключиться к серверу Windows: com.jcraft.jsch.JSchException: java.net.ConnectException: соединение отклонено: connect –

-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(); 
Смежные вопросы