package com.cloudera.sa.node360.nodepuller;
import com.cloudera.sa.node360.nodepuller.listener.EventListener;
import com.cloudera.sa.node360.nodepuller.operations.SshExecOperation;
import com.jcraft.jsch.*;
import java.io.IOException;
import java.util.List;
public class SshConnection {
private String host;
private int port;
private String username;
private String password;
private List<SshExecOperation> operationList;
private long waitTime;
private Session session = null;
private EventListener listener = null;
public SshConnection(String host, int port, String username,
String password, long waitTime,
List<SshExecOperation> operationList,
EventListener listener) {
this.host = host;
this.port = port;
this.username = username;
this.password = password;
this.waitTime = waitTime;
this.operationList = operationList;
this.listener = listener;
}
public void connect() throws JSchException, IOException, InterruptedException {
JSch jsch=new JSch();
session=jsch.getSession(username, host, 22);
session.setPassword(password);
UserInfo ui = new MyUserInfo(){
public boolean promptYesNo(String message){
return true;
}
// If password is not given before the invocation of Session#connect(),
// implement also following methods,
// * UserInfo#getPassword(),
// * UserInfo#promptPassword(String message) and
// * UIKeyboardInteractive#promptKeyboardInteractive()
};
session.setUserInfo(ui);
session.connect(30000);
while (true) {
for (SshExecOperation operation: operationList) {
operation.execute(session, listener);
}
Thread.sleep(waitTime);
}
}
public void disconnect() {
session.disconnect();
}
public static abstract class MyUserInfo
implements UserInfo, UIKeyboardInteractive{
public String getPassword(){ return null; }
public boolean promptYesNo(String str){ return false; }
public String getPassphrase(){ return null; }
public boolean promptPassphrase(String message){ return false; }
public boolean promptPassword(String message){ return false; }
public void showMessage(String message){ }
public String[] promptKeyboardInteractive(String destination,
String name,
String instruction,
String[] prompt,
boolean[] echo){
return null;
}
}
}