我试图找出Linux机器的操作系统版本,并且在我传递预期操作系统名称的参数中,如果它与实际结果匹配,那么它将显示一条消息为"正确的操作系统如果没有,它会告诉我错误的操作系统。但是当我使用密码登录超过10个字符的用户时出现问题。如果我的密码小于或等于10个字符,那么它可以正常工作。如果我的密码正好是10个字符,并且我添加了更多的字符(这基本上是一个错误的密码)。它会自动修剪最多10个字符并登录到机器并执行命令 请告诉我代码出错的地方。
package com.OSVerification;
import com.LogsCopy.StoreLogs;
import com.jcraft.jsch.*;
import java.io.*;
public class LinuxOs{
private static String[] vmpass;
public static String[] getArgs() {
return vmpass;
}
public static int main(String[] args) throws IOException {
String vmname = args[0]; // Linux machine Host name
String vmuid = args[1]; // user id
String vmpass = args[2]; //password
String osname = args[3]; // Expected OS Name
String dbname = args[4]; // database name (used for my personal purpose)
int check = 0;
Session session = null;
Channel channel = null;
try{
JSch jsch=new JSch();
jsch.removeAllIdentity();
String command= "uname -r | grep -o el.* | cut -d . -f1"; // command to find out the os version
session = jsch.getSession(vmuid, vmname+".us.oracle.com", 22);
session.setPassword(vmpass);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
System.out.println("Host connected.");
channel=session.openChannel("exec");
InputStream in=channel.getInputStream();
((ChannelExec)channel).setCommand(command);
channel.connect();
byte[] tmp=new byte[1024];
String temp=null;
while(true){
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0)break;
temp = new String(tmp,0,i);
}
if(channel.isClosed()){
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
}
String nn = temp.substring(0,6);
if(nn.equals(osname))
{
check = 1;
System.out.println("Correct OS");
}
else{
System.out.println("Wrong OS");
check =0;
System.exit(1);
}
channel.disconnect();
session.disconnect();
}
catch(Exception e){
System.out.println(e);
}
return check;
}
}