リモート マシンでコマンド (ファイルが存在するかどうかを確認するなど) を実行しようとすると、このエラーが発生します。この段階で失敗 -
channel.connect(60000);com.jcraft.jsch.JSchException: com.jcraft.jsch.Request.write(Request.java:65) で com.jcraft.jsch.RequestExec.request(RequestExec. java:56) で com.jcraft.jsch.ChannelExec.start(ChannelExec.java:43) で com.jcraft.jsch.Channel.connect(Channel.java:152) で SampleTest.jcraftTest(SampleTest.java:143) でSampleTest.main(SampleTest.java:23)
私が使用しているコード
JSch jsch = new JSch();
session = jsch.getSession("username", "host", 22);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications", "password,keyboard-interactive");
session.setConfig(config);
session.setPassword("password");
session.connect(60000);
System.out.println("session connected");
channel = session.openChannel("exec");
System.out.println("channel opened");
((ChannelExec) channel).setCommand("uname -a && date && uptime && who");
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect(60000);
System.out.println("channel connected");
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) {
ee.printStackTrace();
}
}