

import java.io.InputStream;

import org.apache.tools.ant.taskdefs.optional.ssh.SSHUserInfo;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UserInfo;

public class threadedSSHtest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		final String host = "10.5.5.66";
		final String user = "root";
		final String password = "rootspassword";
		final String cmd = "ls -al afiletolist";
		// TODO Auto-generated method stub
		class runls implements Runnable {

			public void run() {
				String result = sshcall(host,user,password,cmd);
				System.out.println(Thread.currentThread().getName() + result);
			}
		}

		Thread[] th = new Thread[1000];
		for(int aa=0;aa<=200;aa++) {
			runls runme = new runls();
			th[aa] = new Thread(runme);
			th[aa].start();
			/*try {
				Thread.sleep(300);
			} catch (Exception e) {
				e.printStackTrace();
			}*/
		}
		for(int aa=0;aa<=200;aa++) {
			try {
				th[aa].join();
			} catch(Exception e) {
				e.printStackTrace();
			}

		}
	}
		
		
	static public String sshcall(String server, String username, String password, String command){
		String retvalue = null;
		try {

			int timeout = 5*60;
			JSch jsch=new JSch(); 
			Session session=jsch.getSession(username, server, 22);
			session.setTimeout(timeout*1000);
			UserInfo ui=new SSHUserInfo(password, true);
			session.setUserInfo(ui);
			session.connect();
			Channel channel=session.openChannel("exec");
			((ChannelExec)channel).setCommand(command);
			//channel.setXForwarding(true);
			//channel.setInputStream(System.in);
			channel.setInputStream(null);
			InputStream in=channel.getInputStream();
			channel.connect();
			byte[] tmp=new byte[1024];
			String output = new String();
			while(true){
				if(session.isConnected()==false) {
					System.err.println("SSHExec Connection timed out.");
				}
				while(in.available()>0){
					int i=in.read(tmp, 0, 1024);
					if(i<0)break;
					output = output + new String(tmp, 0, i);
				}
				if(channel.isClosed()){
					break;
				}
				try{Thread.sleep(1000);}catch(Exception ee){}
			}
			channel.disconnect();
			session.disconnect();
			return(output);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return (retvalue);
	}
		
		

}
