I am currently trying to retrieve JSON files from an Unix server.
I used JSch to do my connection, which works fine. Now my challenge is to send a command (more or less a few cd and ls, so a very simple one) to the server.
The thing is I am getting an error, and I'm stuck.
Here is the code of the servlet:
import java.io.IOException;
import java.io.PrintWriter;
import static java.lang.System.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.lang.Runtime;
@WebServlet("/ConnexionRecette")
public class ConnexionRecette extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String user = "xxxx";
String password = "xxxxxx!";
String host = "xxxxxx";
int port = 22;
// String remoteFile = "xxxxxxxxxx";
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.println("<html>");
out.println("<head><title>Connect to serv test</title></head>");
out.println("<body>");
out.println("<br>print avant try");
try {
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
out.println("<br>Establishing Connection...");
session.connect();
out.println("<br>Connection established.");
out.println("<br>Crating SFTP Channel.");
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
out.println("<br>SFTP Channel created.");
out.println("<br> ********** Ok on serv, end of connection code, end of try. **********");
Runtime runtime = Runtime.getRuntime();
String[] args = { "cd .."};
final Process process = runtime.exec(args);
BufferedReader output = getOutput(process);
BufferedReader error = getError(process);
String line = "";
while((line = output.readLine()) != null) {
out.println(line);
}
while((line = error.readLine()) != null) {
out.println(line);
}
process.waitFor();
} catch (IOException e) {
out.println("<br>Print in catch IO");
out.println("<br>*********************<br>");
e.printStackTrace();
out.println("<br>*********************<br>");
} catch (InterruptedException e) {
out.println("<br>Print in catch Interrupted");
out.println("<br>*********************<br>");
out.println("<br>*********************<br>");
e.printStackTrace();
}
out.println("<br>print après le try catch");
out.println("</body>");
out.println("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
The error when calling the servlet:
Cannot run program "ssh": CreateProcess error=2, Le fichier spécifié est introuvable
java.io.IOException: Cannot run program "cd ..": CreateProcess error=2, Le fichier spécifié est introuvable
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at ConnexionRecette.doGet(ConnexionRecette.java:92)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: CreateProcess error=2, Le fichier spécifié est introuvable at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.(Unknown Source) at java.lang.ProcessImpl.start(Unknown Source)
Thanks in advance!