Java程序无法从Linux服务器远程读取文件

问题描述:

我想通过我的Java程序从Linux服务器远程访问文件sever.I已经写这段代码,但它不工作。Java程序无法从Linux服务器远程读取文件

public static void main(String arg[]) throws FileNotFoundException 
    { 
     JSch jsch = new JSch(); 
     Session session = null; 
     BufferedReader br = null; 
     try { 
      session = jsch.getSession("root", "IPServer", 22); 
      session.setConfig("StrictHostKeyChecking", "no"); 
      session.setPassword("Password"); 
      session.connect(); 
      System.out.println("Server is connect"); 
      try 
      { 
       String command = "scp -f /var/log/callrec/core1.log"; 
       Channel channel = session.openChannel("exec"); 
       ((ChannelExec)channel).setCommand(command); 

       OutputStream out = channel.getOutputStream(); 
       InputStream in = (InputStream) channel.getInputStream(); 

       channel.connect(); 

       br = new BufferedReader(new InputStreamReader(in)); 

       StringBuilder sb = new StringBuilder(); 

       String line; 
       while ((line = br.readLine()) != null) { 
        System.out.println(line); 
       } 

       System.out.println("\nDone!"); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
      session.disconnect(); 
     } catch (JSchException e) { 
      e.printStackTrace(); 
    // } catch (SftpException e) { 
    //  e.printStackTrace(); 
     } 
    } 

我的程序没有抛出任何错误,我可以看到“服务器连接”的消息我的控制台上,然后挂了,不给任何其他输出,它并没有终止....

首先检查您是否可以通过ssh使用相同的参数从shell连接到此服务器。您将消除网络问题变体。例如linux服务器可能会拒绝远程root登录。

然后一旦你的程序挂起,登录到这个linux服务器并运行who命令来查看,如果你的java程序成功登录。或者,您可以运行ps -afx命令查看,如果scp命令正在运行。或者更好地执行touch/var/tmp/java-test来自Java而不是scp的命令。然后ls会告诉你,如果你成功地在这个服务器上执行java的远程命令。

我希望这能帮助你找到原因。