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
相关产品推荐
相关产品推荐

