You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java客户端实现两台UNIX服务器之间互ping的技术问题

两台UNIX服务器间ping功能实现方案

你当前的代码是在Java程序所在的本地机器执行系统命令,要实现从指定UNIX服务器向另一台服务器发起ping,核心逻辑改为通过SSH远程登录到作为发起端的UNIX服务器,在该服务器上执行ping命令后返回结果即可。

前置准备

  • 确认发起ping的UNIX服务器已开启SSH服务,且你持有该服务器的合法登录凭证(账号密码/SSH密钥)
  • Java项目引入SSH协议实现依赖JSch,Maven项目依赖配置如下:
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

代码实现

远程命令执行工具方法

替换现有本地执行命令的逻辑,新增SSH远程执行命令方法:

import com.jcraft.jsch.*;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public static String runRemoteSshCommand(String sshHost, int sshPort, String sshUser, String sshPwd, String execCommand) {
    StringBuilder result = new StringBuilder();
    JSch jsch = new JSch();
    Session session = null;
    ChannelExec channelExec = null;
    try {
        // 初始化SSH会话
        session = jsch.getSession(sshUser, sshHost, sshPort);
        session.setPassword(sshPwd);
        // 跳过主机密钥校验,生产环境可根据需要配置校验规则
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect(30000); // 30秒连接超时

        // 打开执行命令通道
        channelExec = (ChannelExec) session.openChannel("exec");
        channelExec.setCommand(execCommand);
        channelExec.connect();

        // 读取命令执行结果
        InputStream inputStream = channelExec.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        while ((line = reader.readLine()) != null) {
            Trace.out(1, line);
            result.append(line).append("\n");
        }
    } catch (Exception e) {
        Trace.out(1, "远程执行命令出错:" + e.getMessage());
    } finally {
        // 关闭资源
        if (channelExec != null) {
            channelExec.disconnect();
        }
        if (session != null) {
            session.disconnect();
        }
    }
    return result.toString();
}

调用示例

要让IP为192.168.1.10的UNIX服务器,向目标服务器192.168.1.20发起ping,调用方式如下:

// UNIX系统ping默认会持续发送报文,加 -c 4 限定只发4包后结束
String pingCommand = "ping -c 4 192.168.1.20";
String pingResult = runRemoteSshCommand("192.168.1.10", 22, "你的服务器用户名", "你的服务器密码", pingCommand);

注意事项

  • 如果使用SSH密钥登录,调用jsch.addIdentity("你的私钥文件路径")即可,不需要给session设置密码
  • 确保发起ping的UNIX服务器的22端口(或自定义SSH端口)没有被防火墙拦截,和本地Java客户端网络连通
  • 不同UNIX发行版的ping命令参数可能略有差异,可根据实际使用的系统调整参数

内容的提问来源于stack exchange,提问作者Jexxer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:48:03