importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.util.ArrayList;importcom.jcraft.jsch.Channel;importcom.jcraft.jsch.ChannelExec;importcom.jcraft.jsch.JSch;importcom.jcraft.jsch.JSchException;importcom.jcraft.jsch.Session;importcom.jcraft.jsch.UserInfo;/***
* @desc SSHConnectionTest.java
*
*@authorxianlei
* @date 2018年3月29日下午5:53:24*/
public classSSHConnectionTest {//远程主机的ip地址
privateString ip;//远程主机登录用户名
privateString username;//远程主机的登录密码
privateString password;//设置ssh连接的远程端口
public static final int DEFAULT_SSH_PORT = 22;//保存输出内容的容器
private ArrayListstdout;class MyUserInfo implementsUserInfo {
@OverridepublicString getPassphrase() {//TODO Auto-generated method stub
System.out.println("MyUserInfo.getPassphrase()");return null;
}
@OverridepublicString getPassword() {//TODO Auto-generated method stub
System.out.println("MyUserInfo.getPassword()");return null;
}
@Overridepublic booleanpromptPassphrase(String arg0) {//TODO Auto-generated method stub
System.out.println("MyUserInfo.promptPassphrase()");
System.out.println(arg0);return false;
}
@Overridepublic booleanpromptPassword(String arg0) {//TODO Auto-generated method stub
System.out.println("MyUserInfo.promptPassword()");
System.out.println(arg0);return false;
}
@Overridepublic booleanpromptYesNo(String arg0) {//TODO Auto-generated method stub'
System.out.println("MyUserInfo.promptYesNo()");
System.out.println(arg0);if (arg0.contains("The authenticity of host")) {return true;
}return true;
}
@Overridepublic voidshowMessage(String arg0) {//TODO Auto-generated method stub
System.out.println("MyUserInfo.showMessage()");
}
}/*** 初始化登录信息
*@paramip
*@paramusername
*@parampassword*/
public SSHConnectionTest(final String ip, final String username, finalString password) {this.ip =ip;this.username =username;this.password =password;
stdout= new ArrayList();
}/*** 执行shell命令
*@paramcommand
*@return
*/
public int execute(finalString command) {int returnCode = 0;
JSch jsch= newJSch();
MyUserInfo userInfo= newMyUserInfo();try{//创建session并且打开连接,因为创建session之后要主动打开连接
Session session =jsch.getSession(username, ip, DEFAULT_SSH_PORT);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.setUserInfo(userInfo);
session.connect();//打开通道,设置通道类型,和执行的命令
Channel channel = session.openChannel("exec");
ChannelExec channelExec=(ChannelExec)channel;
channelExec.setCommand(command);
channelExec.setInputStream(null);
BufferedReader input= new BufferedReader(newInputStreamReader
(channelExec.getInputStream()));
channelExec.connect();
System.out.println("The remote command is :" +command);//接收远程服务器执行命令的结果
String line;while ((line = input.readLine()) != null) {
stdout.add(line);
}
input.close();//得到returnCode
if(channelExec.isClosed()) {
returnCode=channelExec.getExitStatus();
}//关闭通道
channelExec.disconnect();//关闭session
session.disconnect();
}catch(JSchException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(Exception e) {
e.printStackTrace();
}returnreturnCode;
}/*** get stdout
*@return
*/
public ArrayListgetStandardOutput() {returnstdout;
}public static void main(finalString [] args) {
String password= "";
String username= "root";
String ip= "";
SSHConnectionTest shell= newSSHConnectionTest(ip, username, password);//启动redis服务命令
shell.execute("cd /usr/local/redis && ./redis-server redis.conf &");//关闭redis服务命令//shell.execute("cd /usr/local/redis && ./redis-cli shutdown");
ArrayList stdout =shell.getStandardOutput();for(String str : stdout) {
System.out.println(str);
}
}
}