使用JavaJSCH库一个接一个地执行多个命令
我正在寻找一种解决方案,来解决需要按顺序一个接一个地执行的命令集。同样,只有在上一个命令完成执行后,才能执行一个命令使用JavaJSCH库一个接一个地执行多个命令,java,jsch,Java,Jsch,我正在寻找一种解决方案,来解决需要按顺序一个接一个地执行的命令集。同样,只有在上一个命令完成执行后,才能执行一个命令 String command="cd /home/; ls-ltr;" java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); JSch jsch = new JSch();
String command="cd /home/; ls-ltr;"
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session=jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream in=channel.getInputStream();
channel.connect();
byte[] tmp=new byte[1024];
while(true){
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0)break;
System.out.print(new String(tmp, 0, i));
}
if(channel.isClosed()){
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
}
if(channel.isClosed()){
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
}
System.out.println("DONE");
String命令=“cd/home/;ls ltr;”
java.util.Properties config=new java.util.Properties();
配置放置(“检查”、“否”);
JSch JSch=新的JSch();
Session Session=jsch.getSession(用户,主机,22);
session.setPassword(密码);
session.setConfig(config);
session.connect();
System.out.println(“已连接”);
Channel=session.openChannel(“exec”);
((ChannelExec)channel).setCommand(command);
channel.setInputStream(空);
((ChannelExec)channel.setErrStream(System.err);
InputStream in=channel.getInputStream();
channel.connect();
字节[]tmp=新字节[1024];
while(true){
while(in.available()>0){
inti=in.read(tmp,0,1024);
如果(i我将实现从“exec”更改为“shell”,并在每个命令之间使用“&&&”更新命令。现在,只有在前一个命令完全执行之后,才能执行以下命令。即“&&&”的工作方式是,基于前一个命令的成功状态,即检查退出状态,该状态应为“0”否则将不执行以下命令
更新代码:
try{
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
Session session=jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");
Channel channel=session.openChannel("shell");
OutputStream ops = channel.getOutputStream();
PrintStream ps = new PrintStream(ops, true);
channel.connect();
ps.println(command1 + "&&" + command2 + "&&" + command3 +"&&" +command4);
InputStream in=channel.getInputStream();
byte[] tmp=new byte[1024];
while(true){
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0)break;
System.out.print(new String(tmp, 0, i));
}
if(channel.isClosed()){
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
}
channel.disconnect();
session.disconnect();
System.out.println("DONE");
}catch(Exception e){
e.printStackTrace();
}
试试{
java.util.Properties config=new java.util.Properties();
配置放置(“检查”、“否”);
JSch JSch=新的JSch();
Session Session=jsch.getSession(用户,主机,22);
session.setPassword(密码);
session.setConfig(config);
session.connect();
System.out.println(“已连接”);
Channel=session.openChannel(“shell”);
OutputStream ops=channel.getOutputStream();
PrintStream ps=新的PrintStream(ops,true);
channel.connect();
ps.println(command1+“&&&+command2+”&&“+command3+”&&+command4);
InputStream in=channel.getInputStream();
字节[]tmp=新字节[1024];
while(true){
while(in.available()>0){
inti=in.read(tmp,0,1024);
如果(i您可以使用一个又一个命令,方法是在命令后面附加&。例如
jschUtil.openChannel("exec");
jschUtil.getExecSshChannel().setCommand("cd /root/Test1/Test2 && mkdir Neel");
在这里,目录Neel将在Test2内部创建。如果您创建两个单独的通道,或者一个接一个地使用命令,这是不可能的。在目标系统上创建一个shell脚本并调用它?是的,我只是尝试使用shell。但我不确定在执行前一个命令后如何执行一个命令。>ls-ltr/home/
将只是一个命令…脚本应该做什么?您能描述一下您的脚本最终应该做什么吗?我将实现从“exec”更改为shell,并在每个命令之间用“&&&”更新命令。现在,只有在前一个命令完全执行之后,才能执行以下命令。即“&&”其工作方式是,基于上一个命令的成功状态,即检查退出状态,该状态应为“0”,否则将不会执行以下命令。