传递密码时,Java程序未获得正确的值

时间:2016-09-29 05:28:06

标签: java jsch

我试图找出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;
}

}

0 个答案:

没有答案