我开发了一个Web应用程序(部署在weblogic服务器上),我想连接到solaris服务器并使用特定的unix用户执行shell脚本。 目前,该脚本与wls用户一起运行。这是我的代码部分:
String CLA="-d";
out.println("Stopping ASAP for the changes to reflect ...");
ProcessBuilder processBuilder = new ProcessBuilder("/bin/ksh","/apps/vpn/asap/scripts/stop_asap_sys_tool"+" "+CLA);
process = processBuilder.start();
InputStream is = process.getInputStream();
InputStream isErr = process.getErrorStream();
InputStreamReader isr = new InputStreamReader(is);
InputStreamReader isrErr = new InputStreamReader(isErr);
BufferedReader br = new BufferedReader(isr);
BufferedReader brErr = new BufferedReader(isrErr);
String line;
String lineErr;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
while ((lineErr = brErr.readLine()) != null) {
System.out.println(lineErr);
}
我的搜索结果建议使用Jsch。有人可以给我一个关于我使用Jsch的实现的例子。或者其他任何方式吗?!
谢谢, Bhavin答案 0 :(得分:1)
Jsch是一个很好的方式,这里可以帮助你做你想做的事情:
建议,当您执行脚本,然后在Windows上编写或在那里打开它们时,您需要在文件上运行dos2unix(如果您在Linux上执行);否则你的远程执行将会失败。
答案 1 :(得分:0)
我认为这可以帮到你
/**
* This method allows you to send and execute *nix command through SSH
* to specified removed host and returns command output, in case incorrect
* command will return command output error
*
* @param user - ssh user name for login
* @param password - ssh password for login
* @param host - ip or domain with ssh server
* @param command - command to execute
* @return string with command output or output error
* @author Roman Kukharuk
*/
public String execNixComAndGetRez(String user, String password, String host,
String command) {
int port = 22;
String rez = "+!";
try {
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
// System.out.println("Establishing Connection...");
session.connect();
// System.out.println("Connection established.");
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command); //setting 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));
rez = new String(tmp, 0, i);
}
if (channel.isClosed()) {
// System.out.println("exit-status: "+channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception e) {
rez = e.toString();
}
}
channel.disconnect();
session.disconnect();
}
catch (Exception e) {
rez = e.toString();
}
return rez;
}