我想使用 RExecClient Apache Commons-Net 类在远程机器上运行命令。
我的代码是:
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.bsd.RExecClient;
public class TestRlogin {
static final int PORT_NUMBER = 512;
private RExecClient client;
private final String url = "test.corp";
private final String login = "bob";
private final String password = "bob";
public TestRlogin() {
client = new RExecClient();
}
public String run(String cmd) throws IOException {
String res = null;
InputStream is = null;
if (client != null) {
try {
if (!client.isConnected()) {
client.connect(url, PORT_NUMBER);
}
client.rexec(login, password, cmd);
is = client.getInputStream();
if (is != null && is.available() > 0) {
res = IOUtils.toString(is);
} else {
System.err.println("InputStream is not available!");
}
} catch (Exception e) {
e.printStackTrace();
}
finally {
IOUtils.closeQuietly(is);
client.disconnect();
}
} else {
System.err.println("The RLogin client is not connected to "+url);
}
return res;
}
public void main(String[] args) {
TestRlogin trl = new TestRlogin();
try {
System.out.println(trl.run("ls -lrt /tmp;"));
System.out.println(trl.run("tar -xf /tmp/archive.tar;"));
System.out.println(trl.run("ls -lrt /tmp;"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
该ls
命令工作正常,但该tar
命令不提取存档并且不返回任何内容。我得到的信息是InputStream is not available!
。
我检查了两次服务器上存在的 tar 存档。当我手动 rlogin 并运行命令时,没有返回任何内容,但提取了 tar 存档。
我没主意了。