SELINUX设为Disable 影响java SSH工具包Jsch 0.1.49.jar的一个案例

最近项目中遇到一个典型事件,当RHEL 的SELINUX设为DISABLE时

使用JAVA的Jsch 库调用SSH命令时将随机返回空字符串,我使用的版本是0.1.49,最新版本0.1.51未测试。

关于Jsch: http://www.jcraft.com/jsch/

为此,我特意写了一个程序测试:

package com.ibm.leo;

import com.ibm.gts.cms.common.guestssh.api.GuestSshServiceFactory;
import com.ibm.gts.cms.common.guestssh.api.IGuestSshProperties;
import com.ibm.gts.cms.common.guestssh.api.IGuestSshService;
import com.ibm.gts.cms.common.guestssh.api.IScriptResponse;

public class GuestSSH {
    /**
     * This code snippet will validate that the guestssh service remove execute will return null randomly  if the selinux was disabled.
     * */
	public static void main(String[] args) {
		try{
		int sshRC=-1;
		if(args.length<3){
			System.out.println("Usage: java -jar testssh.jar <Host IP> <command> <count>");
			System.exit(1);
		}

		int count=Integer.parseInt(args[2]);
		if(count==0) count=1;

		int nullCount=0;
		System.out.println("start test...");
		// Run the command via SSH
			IGuestSshService sshService = GuestSshServiceFactory.GetService();
			IGuestSshProperties props = sshService.makeGuestSshProperties();
			props.setConnectTimeout(60000);  //  60 seconds to establish connection with the guest
			props.setCommandTimeout(60 * 60 * 1000); // 1 hour to wait for command to complete (after connection)
			//props.setScriptInputStream(null); // stdin may be null, which is OK and means no stdin data
			for(int i=1;i<=count;i++){
				IScriptResponse response = sshService.invoke("root", args[0], 22, null, args[1], null, props);
				sshRC = response.getReturnCode();
				String[] stdoutLines = response.getStandardOutputLines();
				if(stdoutLines[0].trim().equals("")) nullCount++;
				System.out.println("Exceute count:"+i+"  returnCode: "+sshRC +" return Lines:"+stdoutLines.length);
				for (String line : stdoutLines) {
					System.out.println("Command return: "+line);
				}
			}
			System.out.println("End test, the total execute count is "+count+", and  first line null return count is: " + nullCount);
		}catch(Exception e){
			System.out.println(e.getMessage());
		}
	}

}

测试结果如下:

D:\tmp>java -jar testssh.jar 192.168.1.244 hostname 5
start test...
Exceute count:1  returnCode: 0 return Lines:1
Command return: GMTDev
Exceute count:2  returnCode: 0 return Lines:1
Command return:
Exceute count:3  returnCode: 0 return Lines:1
Command return:
Exceute count:4  returnCode: 0 return Lines:1
Command return:
Exceute count:5  returnCode: 0 return Lines:1
Command return: GMTDev
End test, the total execute count is 5, and  first line null return count is: 3

从结果中可以看出,共取了5次主机名,只有两得到,3次虽然命令成功执行,但返回空值,这种情况只有当SELINUX=disabled时出现,而Enforcing和permissive返回值都正常。

或许是guestssh的一个BUG? 记录一下备查。

时间: 2024-11-07 08:02:00

SELINUX设为Disable 影响java SSH工具包Jsch 0.1.49.jar的一个案例的相关文章

java SSH框架详解(面试和学习都是最好的收藏资料)

Java—SSH(MVC)1. 谈谈你mvc的理解MVC是Model—View—Controler的简称.即模型—视图—控制器.MVC是一种设计模式,它强制性的把应用程序的输入.处理和输出分开.MVC中的模型.视图.控制器它们分别担负着不同的任务.视图: 视图是用户看到并与之交互的界面.视图向用户显示相关的数据,并接受用户的输入.视图不进行任何业务逻辑处理.模型: 模型表示业务数据和业务处理.相当于JavaBean.一个模型能为多个视图提供数据.这提高了应用程序的重用性控制器: 当用户单击Web

Java 并发工具包 java.util.concurrent 大全

1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Java 的并发编程变得更加简单轻松的类.在这个包被添加以前,你需要自己去动手实现自己的相关工具类. 本文我将带你一一认识 java.util.concurrent 包里的这些类,然后你可以尝试着如何在项目中使用它们.本文中我将使用 Java 6 版本,我不确定这和 Java 5 版本里的是否有一些差异

常用jdk【java开发工具包】下载

学习和开发办公常用的java开发工具包下载,jdk全系列 收集了常用的jdk1.4(32位).jdk5.0(32位).jdk6.0(32/64位).jdk7.(32/64位)0.jdk8.0(32/64位)各种版本的安装包.提供给需要的童鞋们下载了 下载地址:链接: http://pan.baidu.com/s/1pJlxPBP 提取码:s4la

JAVA SSH 框架介绍

SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架. Struts Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的.由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注.Struts把Servlet.JSP.自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套M

影响Java EE性能的十大问题

本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE.中间件和JVM技术.他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题. 1.缺乏正确的容量规划 容量规划是一个全面的和发展的过程标准,预测当前和未来的IT环境容量需求.制定合理的容量规划不仅会确保和跟踪当前IT生产能力和稳定性,同时也会确保新项目以最小的风险部署到现有的生产环境中.硬件.中间件.JVM.调整等在项目部署之前就应该准备好. 2.Java EE中间件环境

影响Java代码性能的一些细节

读<Effective Java>的一些收获,会持续添加. Integer和 int的区别: int是 Java基本数据类型,表示一个整型值.Integer是对 int基本类型的一个封装(每一个 Integer对象中都包含一个"private final int value;"的成员变量),提供了一系列的通用方法,如 int与 String的相互转换,把 int值转换为 long.char等其他基本类型.相应地,两个封装了相同的 int值的 Integer对象在使用&quo

Java ssh库:Apache sshd库和JSch库(Java Secure Channel)

1.Apache sshd Apache sshd是一个SSH协议的100%纯Java库,支持客户端和服务器.sshd库基于Apache MINA项目(可伸缩高性能的异步IO库).官方网站:http://mina.apache.org/sshd-project/documentation.html 客户端示例代码: public void clentTest() throws IOException { String cmd="ifconfig"; SshClient client=S

从 4 个维度剖析:影响 Java 性能的那些因素

随着互联网行业的高速发展,现在的网站界面设计变得越来越酷炫.诚然,视觉上给我们带来的冲击,会对网站流量起到很大的作用.但是,如果后端服务满足不了突增的并发量,那么用户体验就会变得极差. 众所周知,做一个网站非常不容易.现在,Java 也是开发者最常用的编程语言之一,而且很多企业级的 IT 公司对 Java 的依赖程度也非常之高.太多的网站由于 Java 的性能问题导致了商业前景破灭,听起来很残酷,但这是一个不争的事实.那么问题来了,是什么原因导致了这些性能问题? 如何才能快速发现导致性能问题的根

Java SSH 项目总结——设定工作日日历

前言 今天文章的主题就是日历,先介绍下背景,这个日历是为一个在线预约系统服务的,在线预约就是选择工作日,然后进行具体业务的预约,而工作日的是设定就是通过我们这个日历来完成的. 正题 效果 我们先来看下日历的效果图,第一张是当前月的日历,第二张是设定完工作日的日历, 分解 我们要实现这个工作日设定的日历的功能,将这个功能进行分解: 1.实现一个万年历. 2.通过界面点击日历将工作日保存到数据库中 3.将数据库中已经设定好的日期渲染到界面日历中以不同的颜色进行标识. 实现 数据库设计 数据库中需要保