java运用jsch做一个简单的ssh连接
1 思路 :
①已知一台设备的 IP 端口 账号 密码
②通过 IP 端口 账号 实例化会话
③设置会话的密码,并进行连接
④保持会话,通过改会话创建相应类型的通道,并进行通道连接
⑤执行想要的操作,设置想要返回的消息
⑥关闭
2 外部依赖
< dependency>
< groupId>com.jcraft< /groupId>
< artifactId>jsch< /artifactId>
< version>0.1.55< /version>
</ dependency>
3 具体代码
package myjsch;
import com.jcraft.jsch.;
import myjsch.entity.Userinfo;
import java.io.;
import java.util.*;
public class lisftp {
//sftp通道
private ChannelSftp channelSftp ;
//会话
private Session session ;
//等待时间
private int timeot= 60000;
public lisftp(Userinfo userinfo) throws JSchException {
JSch jSch = new JSch();
//账号 IP 端口 实例化session
session = jSch.getSession(userinfo.getUsername(),userinfo.getIP(),userinfo.getPort());
//设置密码
session.setPassword(userinfo.getPwd());
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
//设置配置
session.setConfig(config);
session.setTimeout(timeot);
//连接
session.connect();
}
public void close() {
session.disconnect();
}
public String doCMD(String cmd) throws JSchException, IOException {
//创建exec通道
Channel channel = session.openChannel("exec");
ChannelExec channelExec = (ChannelExec) channel;
//设置命令
channelExec.setCommand(cmd);
channelExec.setInputStream(null);
//获取输入流
BufferedReader input = new BufferedReader(new InputStreamReader
(channelExec.getInputStream()));
//获取ERROR流
BufferedReader CMDError = new BufferedReader(new InputStreamReader
(channelExec.getErrStream()));
//连接
channelExec.connect();
String line = "";
StringBuffer out = new StringBuffer();
while ((line = input.readLine()) != null) {
out.append(line + "\n");
}
StringBuffer eOut = new StringBuffer();
while ((line = CMDError.readLine()) != null) {
eOut.append(line + "\n");
}
if(eOut.length() != 0){
System.out.println("ERROR : "+ eOut.toString());
}
// 关闭通道
channelExec.disconnect();
input.close();
return out.toString();
}
public static void main(String[] args)
{
Userinfo userinfo=new Userinfo();
userinfo.setIP("10.12.3.6");
userinfo.setUsername("root");
userinfo.setPwd("Boco123");
userinfo.setPort(22);//默认端口
try{
lisftp sshUtil=new lisftp(userinfo);
System.out.println("CMD REUSLT1: "+sshUtil.doCMD("ls "));
System.out.println("CMD REUSLT2: "+sshUtil.doCMD("rm -f lilin"));
System.out.println("CMD REUSLT3: "+sshUtil.doCMD("ls "));
sshUtil.close();
}catch(Exception e){
e.printStackTrace();
}
}
}