Реализация ожидаемых запросов через SSH с использованием Apache sshd в JavaJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Реализация ожидаемых запросов через SSH с использованием Apache sshd в Java

Сообщение Anonymous »

Я пытался подключиться к другому компьютеру с 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»