我正在尝试使用 maverick-synergy-client 3.1.1 通过 SSH 连接调用远程 Linux 命令:Rocky Linux 9.JDK 17.0.3 首先,我尝试将其作为 Java 客户端应用程序运行:public class Shh...
我正在尝试使用 maverick-synergy-client 3.1.1 通过 SSH 连接调用远程 Linux 命令:
Rocky Linux 9.JDK 17.0.3
首先,我尝试将其作为 Java 客户端应用程序运行:
public class ShhClient {
public static void main(String[] args) {
Integer response = null;
try{
SshClient ssh = SshClient.SshClientBuilder.create().withHostname("10.0.1.90").withPort(22).withUsername("xxxxxx").withPassword("yyyyyyy").withConnectTimeout(Duration.ofMillis(40000)).build();
response = ssh.executeCommandWithResult("~/bin/test.sh");
} catch (IOException | SshException e) {
e.printStackTrace();
}finally {
System.out.println(response);
}
}
public static Integer callSmsClientOnRemoteLinux(){
Integer response = null;
try{
SshClient ssh = SshClient.SshClientBuilder.create().withHostname("10.0.1.90").withPort(22).withUsername("xxxxxx").withPassword("yyyyyyy").withConnectTimeout(Duration.ofMillis(40000)).build();
response = ssh.executeCommandWithResult("~/bin/test.sh");
} catch (IOException | SshException e) {
e.printStackTrace();
}finally {
return response;
}
}
}
我收到了响应代码“0”,这意味着 test.sh 已在远程主机上执行并正确退出。
但是当我将该代码放入我的 RESTful Web 服务中时:
@WebServlet("/smsForwardAccepter")
public class TeltonikaSMSForwardEndPoint extends HttpServlet implements Serializable {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.info("hit by post request.");
String inString = getBody(req);
logger.info("Income request context: "+inString);
Integer responseForRemoteSSH = ShhClient.callSmsClientOnRemoteLinux();
logger.info("SSH client call to remote Linux: "+responseForRemoteSSH);
JSONObject jo = new JSONObject();
jo.put("result", "touched");
try {
sendAsJson(resp, jo);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
当我通过 curl POST 命令通过 http 访问该 WebServlet 时,Webservlet 被访问并正确获取了请求参数。
但不幸的是,无法调用我的远程 test.sh,返回代码为 'null'。并且对我的 curl 调用也没有产生任何响应。
[2024-09-09T09:52:22.751+1000] [Payara 6.2024.6] [INFO] [] [com.longz.thss.web.thss.sms.TeltonikaSMSForwardEndPoint] [tid: _ThreadID=89 _ThreadName=http-thread-pool::http-listener-1(1)] [timeMillis: 1725839542751] [levelValue: 800] [[
SSH client call to remote Linux: null]]
我的问题是:为什么通过 Java 客户端通过 ssh 调用远程命令并将其放入 WebServlet 会有不同的结果?还是我做错了什么?
请指教!