Мне нужно вызвать соединение SSH из программы JAVA с помощью ProcessBuilder и комбинации USERID/PASSWORD.Как перехватить запрос SSH-пароля в программе Java
Я уже успешно реализовал соединения SSH с использованием Ganymed, JSch, сочетание сценариев JAVA Processbuilder и Expect (Expect4J), JAVA ProcessBuilder и скрипт SSHPASS и общий ключ SSH.
Безопасность не является проблемой в данный момент времени, и все, что я хочу, это возможность программно поддерживать все виды соединений для соединения SSH.
Моя проблема заключается в подсказке пароля, которую SSH выбрасывает где-то, где нет STDIN/STDOUT (по-моему, я полагаю). Это мое последнее препятствие для преодоления.
Мой вопрос: есть ли способ перехватить запрос SSH-пароля и предоставить его из моего кода JAVA?
Пожалуйста, обратите внимание, что это очень узкий вопрос (и вся вышеуказанная информация должна была гарантировать, что ответ не будет слишком широким).
Вот пример кода, что я пытаюсь:
import java.io.*;
import java.util.*;
public class ProcessBuilderTest {
public static void main(String[] args) throws IOException, Exception {
ProcessBuilder pb = new ProcessBuilder(
"/usr/bin/ssh",
"[email protected]",
"export NOME='Jennifer Lawrence'; echo $NOME"
);
pb.redirectErrorStream(); //redirect stderr to stdout
Process process = pb.start();
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while((line = reader.readLine())!= null) {
System.out.println(line);
}
process.waitFor();
}
}
Но, когда я запускаю его я получил это:
[memphis BuilderTest]# java ProcessBuilderTest
[email protected]'s password:
и после того, как я ввожу пароль, я получил остальное выхода:
Jennifer Lawrence
[memphis BuilderTest]#
Опять же, конкретный вопрос: есть ли способ, чтобы породить в Externa l ssh client (OpenSSH, Tectia SSH, SecureCRT и т. д.) с использованием метода PasswordAuthentication (другой метод не может быть использован) с использованием интерфейса JAVA ProcessBuilder (не может использоваться другой язык), перехватывать/записывать приглашение пароля и отвечать/взаимодействовать, пароль из моего кода JAVA (так что пользователю не нужно вводить его)?
Почему вы внедряете его по-разному? –
Моя команда на работе создает инструменты на основе JAVA, которые будут использоваться командами инфраструктуры, и каждая команда имеет свой собственный способ делать что-то (это всемирная корпорация), и мы не можем ограничивать ситуацию, вызывая стандарт или шаблон. –
Ну, есть причина, почему запрос пароля выполнен таким образом, что его нельзя перехватить. Причина в том, что жестко закодированные пароли в программах или сценариях, по меньшей мере, нежелательны. – Ingo