1
jschからJava commendを実行する際に問題が発生しました。私はパテを経由してSSHセッションでそれを実行する場合は、このjavaコマンドが正常に動作しますが、私のコード内で実行すると、127JschでJavaコマンドを発行する際に問題が発生しました
の終了ステータスを返した場合、コマンドはこれです:sendCommand関数された状態で
sshCommManager.sendCommand("cmd /c java -Xms256M -Xmx1024M -jar FileCatalystTester.jar -basic /Y");
execの派生物の例。ここで私が書いた全体SSHCommManagerされています。そのjavaコマンドが動作しませんなぜ私は理解できないよう
public class SSHCommManager extends Observable{
private JSch jsch; //ssh library
private static String user = "what";
private static String password = "youwhat";
//private static String host = "192.168.1.1";
private static SSHCommManager sshCommManager;
private Session session;
private Channel channel;
public boolean commsConnected = false;
private int aPort = 22;
private SSHCommManager() {
this.addObserver(MainUI.getInstance());
}
public static SSHCommManager getInstance() {
if (sshCommManager == null) {
sshCommManager = new SSHCommManager();
}
return sshCommManager;
}
public void init(String aHost) {
try {
jsch = new JSch();
//System.out.println("Getting ssh session...");
session = jsch.getSession(user, aHost, aPort);
session.setX11Host(aHost);
session.setX11Port(aPort + 6000);
//System.out.println("Getting user info...");
session.setPassword(password);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
System.out.println("Connecting to ssh...");
session.connect(30000);
if (session.isConnected()) {
commsConnected = true;
} else {
commsConnected = false;
}
System.out.println(commsConnected);
} catch (Exception e) {
System.out.println(e);
}
}
public void sendCommandTest(String aCommand) {
try {
Channel channel1=session.openChannel("shell");//only shell
System.out.println("Sending Test command: "+ aCommand);
channel1.setOutputStream(System.out);
PrintStream shellStream = new PrintStream(channel1.getOutputStream()); // printStream for convenience
channel1.connect();
shellStream.println(aCommand);
} catch (Exception e) {
System.out.println(e);
}
if (channel.isClosed()) {
System.out.println("exit-status: "
+ channel.getExitStatus());
}
}
public String sendCommand(String aCommand){
InputStream in = null;
OutputStream out = null;
StringBuilder commandOut = new StringBuilder();
try {
channel = session.openChannel("exec");
System.out.println("Sending command: " + aCommand);
((ChannelExec) channel).setCommand(aCommand);
//channel.setInputStream(System.in);
channel.setInputStream(null);
//channel.setOutputStream(System.out);
((ChannelExec) channel).setErrStream(System.err);
in = channel.getInputStream();
//out = channel.getOutputStream();
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));
//System.out.println(channel.getInputStream().toString());
commandOut.append(new String(tmp, 0, i));
//setChanged();
//notifyObservers(System.err.toString() + "\n");
}
if (channel.isClosed()) {
System.out.println("exit-status: "
+ channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
throw new JSchException("Cannot execute remote command: " + aCommand + " : " + ee.getMessage());
}
}
//channel.disconnect();
//session.disconnect();
} catch (Exception e) {
System.out.println(e);
}
return commandOut.toString();
}
public void cleanupSSH() {
channel.disconnect();
session.disconnect();
}
public boolean isCommsConnected() {
return commsConnected;
}
}
は...任意の考えやヘルプをいただければ幸いです。私は実行しようとしているjavaと.jarファイルの両方に直接パスを入れることを含め、すべてを試しました。
ので、あなたは* *ウィンドウにボックスをsshingていますか? – mkoryak
そこに 'cmd/c'は必要ありません。 –
'plink -ssh user @ host java ...'コマンドを実行すると動作しますか?そうでない場合、問題はサーバー側にあります。 ([plink](http://the.earth.li/~sgtatham/putty/0.61/htmldoc/Chapter7.html#plink)は、リモートコマンド実行プログラムであるputtyスイートの一部です) –