Java中通过jsch来连接远程服务器执行linux命令
有时候你可能需要通过代码来控制执行linux命令实现某些功能。
针对这类问题可以使用JSCH来实现,具体代码如下:
publicclassCogradientImgFileManager{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(CogradientImgFileManager.class);
privatestaticChannelExecchannelExec;
privatestaticSessionsession=null;
privatestaticinttimeout=60000;
//测试代码
publicstaticvoidmain(String[]args){
try{
versouSshUtil("10.8.12.189","jmuser","root1234",22);
runCmd("java-version","UTF-8");
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
/**
*连接远程服务器
*@paramhostip地址
*@paramuserName登录名
*@parampassword密码
*@paramport端口
*@throwsException
*/
publicstaticvoidversouSshUtil(Stringhost,StringuserName,Stringpassword,intport)throwsException{
log.info("尝试连接到....host:"+host+",username:"+userName+",password:"+password+",port:"
+port);
JSchjsch=newJSch();//创建JSch对象
session=jsch.getSession(userName,host,port);//根据用户名,主机ip,端口获取一个Session对象
session.setPassword(password);//设置密码
Propertiesconfig=newProperties();
config.put("StrictHostKeyChecking","no");
session.setConfig(config);//为Session对象设置properties
session.setTimeout(timeout);//设置timeout时间
session.connect();//通过Session建立链接
}
/**
*在远程服务器上执行命令
*@paramcmd要执行的命令字符串
*@paramcharset编码
*@throwsException
*/
publicstaticvoidrunCmd(Stringcmd,Stringcharset)throwsException{
channelExec=(ChannelExec)session.openChannel("exec");
channelExec.setCommand(cmd);
channelExec.setInputStream(null);
channelExec.setErrStream(System.err);
channelExec.connect();
InputStreamin=channelExec.getInputStream();
BufferedReaderreader=newBufferedReader(newInputStreamReader(in,Charset.forName(charset)));
Stringbuf=null;
while((buf=reader.readLine())!=null){
System.out.println(buf);
}
reader.close();
channelExec.disconnect();
}
}