8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

通过 SSH、Java 客户端与 WebServlet 调用远程 Linux 命令

Walt 1月前

27 0

我正在尝试使用 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 会有不同的结果?还是我做错了什么?

请指教!

帖子版权声明 1、本帖标题:通过 SSH、Java 客户端与 WebServlet 调用远程 Linux 命令
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Walt在本站《java》版块原创发布, 转载请注明出处!
最新回复 (0)
  • @life888888,这很有趣。我使用 Maverick-synergy-client 库运行代码,他们将其声明为第三代 ssh 客户端。如您所见,此 SSH 客户端不要求用户帐户或任何 .ssh 配置。它使用用户名/密码对来建立 ssh 连接。

  • (1)在 Java 应用程序中,您在自己的帐户和配置文件中运行 ssh。 (2)在您的 Web 服务中?在某人的帐户中运行 Web 服务?检查该帐户'

返回
作者最近主题: