我想通过我的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();
}
}
我的程序没有抛出任何错误,我可以在我的控制台上看到“server is connect”消息,然后它被绞死而没有提供任何其他输出而且它没有终止....
答案 0 :(得分:1)
首先检查是否可以通过ssh使用相同的参数从shell连接到此服务器。您将消除网络问题变体。例如,linux服务器可能会拒绝远程root登录。
然后,一旦你的程序挂起,登录到这个linux服务器并运行who命令,看看你的java程序是否成功登录。或者,如果scp命令正在运行,您可以运行 ps -afx 命令查看。或者更好地从Java而不是scp执行 touch / var / tmp / java-test 命令。然后 ls 会告诉您,如果您在此服务器上成功执行了来自java的远程命令。
我希望这能帮助你找到原因。