在 JSch 中读取上一个命令的响应后执行命令
Executing commands after reading the response of a previous command in JSch
我想使用 JSch 执行 2 个命令,但它们不应该一起执行。我这样做是为了从网关连接到服务器(因此命令 ssh servername)
第一个命令:ssh 服务器名
第二个命令:密码
我尝试了多种方法,但它们总是叠加在一起。
JSch jsch = new JSch();
gateway = jsch.getSession(username, host, port);
gateway.setPassword(password);
gateway.setConfig(SessionPool.defaultSessionConfig());
gateway.setHostKeyAlias(host);
gateway.connect(20000);
System.out.println("Session created");
channel = gateway.openChannel("shell");
OutputStream ops = channel.getOutputStream();
PrintStream ps = new PrintStream(ops, true);
channel.connect();
ps.println("ssh SERVER_NAME" + ENTER_KEY);
ps.println(PASSWORD + ENTER_KEY);
ps.close();
InputStream in = channel.getInputStream();
byte[] bt = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(bt, 0, 1024);
if (i < 0)
break;
String str = new String(bt, 0, i);
// displays the output of the command executed.
System.out.print(str);
}
if (channel.isClosed()) {
break;
}
}
在命令之间放置 Thread.sleep 就可以了 =)
我想使用 JSch 执行 2 个命令,但它们不应该一起执行。我这样做是为了从网关连接到服务器(因此命令 ssh servername)
第一个命令:ssh 服务器名 第二个命令:密码
我尝试了多种方法,但它们总是叠加在一起。
JSch jsch = new JSch();
gateway = jsch.getSession(username, host, port);
gateway.setPassword(password);
gateway.setConfig(SessionPool.defaultSessionConfig());
gateway.setHostKeyAlias(host);
gateway.connect(20000);
System.out.println("Session created");
channel = gateway.openChannel("shell");
OutputStream ops = channel.getOutputStream();
PrintStream ps = new PrintStream(ops, true);
channel.connect();
ps.println("ssh SERVER_NAME" + ENTER_KEY);
ps.println(PASSWORD + ENTER_KEY);
ps.close();
InputStream in = channel.getInputStream();
byte[] bt = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(bt, 0, 1024);
if (i < 0)
break;
String str = new String(bt, 0, i);
// displays the output of the command executed.
System.out.print(str);
}
if (channel.isClosed()) {
break;
}
}
在命令之间放置 Thread.sleep 就可以了 =)