Я пытаюсь разработать небольшое приложение, которое позволяет мне отправлять определенные команды по SSH на удаленный сервер. Если я попробую это с терминала Linux или из командной строки Windows, он работает без проблем, но когда я делаю это из своего приложения Java, он всегда отвечает кодом состояния 255.
Я отключил брандмауэр и изменил порт, где я слушаю SSH на сервере, на 22, потому что я использую другой, но ничего не работает. Он не выдает мне исключений или чего-то еще, и если он подключается без проблем. Любые идеи?
Я пробовал с sshj и JSch, и с обеими у меня одна и та же проблема.
ФорвардАгент выключен
пример sshj
private void sshj() throws Exception {
SSHClient ssh = new SSHClient();
ssh.addHostKeyVerifier((s, i, publicKey) -> true);
ssh.connect("host", 22);
Session session = null;
try {
ssh.authPassword("username", "password");
session = ssh.startSession();
Session.Command cmd = session.exec("command");
System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
cmd.join(5, TimeUnit.SECONDS);
System.out.println("Exit status: " + cmd.getExitStatus());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
ssh.disconnect();
}
}
Пример JSch
private static void jsch() throws Exception {
JSch js = new JSch();
Session s = js.getSession("username", "host", 22);
s.setPassword("password");
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
s.setConfig(config);
s.connect();
Channel c = s.openChannel("exec");
ChannelExec ce = (ChannelExec) c;
ce.setCommand("command");
ce.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(ce.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
ce.disconnect();
s.disconnect();
System.out.println("Exit status: " + ce.getExitStatus());
}
ce.getErrStream()
для просмотра сообщений об ошибках. - person Martin Prikryl   schedule 21.11.2018