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(); } }