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的远程命令。
我希望这能帮助你找到原因。