Я пытался подключиться к другому компьютеру с Linux через SSH с помощью утилиты apache Mina SSHD с Java. Однако обычное соединение и выполнение команд работают очень хорошо. Однако всякий раз, когда у меня есть несколько команд, которые будут запущены на основе ожидаемого запроса от сервера, у меня возникают проблемы с потоками. Я пробовал несколько решений, но ни одно из них не печатает правильно, поэтому все команды выполняются идеально.
SshClient client = null;
ClientSession session = null;
ChannelShell channel = null;
ByteArrayOutputStream stdout = new ByteArrayOutputStream();
ByteArrayOutputStream stderr = new ByteArrayOutputStream();
client = SshClient.setUpDefaultClient();
client.start();
// Step 2: Connect to the remote host
ConnectFuture connectFuture = client.connect(username, host, port);
connectFuture.await(CONNECT_TIMEOUT);
session = connectFuture.getSession();
// Step 3: Authenticate using password
session.addPasswordIdentity(password);
session.auth().verify(SESSION_TIMEOUT);
// Step 4: Create a shell channel for executing multiple commands interactively
channel = session.createShellChannel();
channel.setPtyType("xterm");
Map modes = new HashMap();
modes.put(PtyMode.ECHO, 1);
channel.setPtyModes((modes));
System.out.println("Client created for host: " + host);
// Step 5: Configure PTY for interactive shell
//channel.setPtyType("xterm"); // Set PTY type to xterm
//channel.setPtyModes(EnumSet.of(PtyMode.ECHO)); // Enable PTY mode ECHO
channel.open().verify(CONNECT_TIMEOUT);
// Prepare Input/Output streams for communication
OutputStream input = channel.getInvertedIn(); // Shell input
InputStream output = channel.getInvertedOut(); // Shell output
InputStream errOutput = channel.getInvertedErr(); // Shell error output
BufferedWriter shellInputWriter = new BufferedWriter(new OutputStreamWriter(input, StandardCharsets.UTF_8));
shellInputWriter.write(initialCommand+ "\n" );
shellInputWriter.flush();
BufferedReader shellOutputReader = new BufferedReader(new InputStreamReader(output, StandardCharsets.UTF_8));
BufferedReader shellErrorReader = new BufferedReader(new InputStreamReader(errOutput, StandardCharsets.UTF_8));
String prompt = waitForPrompt(shellOutputReader, input2.getExpectedMessage());
System.out.println("Prompt found: " + prompt);
// Send command after prompt
// getting prompt as null here or it gets stick
shellInputWriter.write(input2.getValue() + "\n");
Подробнее здесь: https://stackoverflow.com/questions/790 ... hd-in-java
Реализация ожидаемых запросов через SSH с использованием Apache sshd в Java ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Реализация ожидаемых запросов через SSH с использованием Apache sshd в Java
Anonymous » » в форуме JAVA - 0 Ответы
- 36 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Реализация запросов Expect через SSH с использованием Apache MINA SSHD в Java
Anonymous » » в форуме JAVA - 0 Ответы
- 51 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Apache Mina-SSHD SSH Client всегда печатает поставщика EDDSA, не поддерживаемый
Anonymous » » в форуме JAVA - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как настроить SSHD и PAM, чтобы сделать процессы сеанса SSH, определяют возможности?
Anonymous » » в форуме Linux - 0 Ответы
- 168 Просмотры
-
Последнее сообщение Anonymous
-