Как получить приветственное сообщение после подключения к SSH с помощью JSch - PullRequest
0 голосов
/ 05 января 2019

Когда я подключаюсь к SSH с помощью PuTTY, я получаю следующее сообщение, как показано ниже.

Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-98-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
deb@ubuntu:~$

Точно так же, когда я использую библиотеку JSch для подключения, я также должен получить то же сообщение в Java. Пожалуйста, помогите мне о том, как получить это. Я предоставляю ниже мои данные кода.

public String connect() {
    String errorMessage = null;
    try {
      sesConnection = jschSSHChannel.getSession(userName, ipOrHostName, PORT);
      sesConnection.setPassword(password);
      sesConnection.setConfig("StrictHostKeyChecking", "no");
      sesConnection.connect(TIMEOUT);

      //After connecting, I should get the welcome message

    } catch (JSchException jschX) {
      errorMessage = jschX.getMessage();
    }
    return errorMessage;
  }

Я хочу получить приветственное сообщение из системы Unix перед выполнением команд в JSch. Пожалуйста, помогите о том, как его получить.

1 Ответ

0 голосов
/ 05 января 2019

Сообщение, которое вы видите, просто печатается на выходе shell .

Это не подходит для автоматического чтения и выполнения команд.

В общем, чтобы автоматизировать выполнение команды, вы правильно планируете использовать SSH-канал "exec" (ChannelExec в JSch). Но этот канал не даст вам сообщение.

Вы должны использовать канал "shell" (ChannelShell в JSch). Но этот канал предназначен для реализации сеанса интерактивной оболочки. Не автоматизировать выполнение команд и не анализировать вывод команд. В частности, в контексте вашего вопроса, нет реального способа узнать конец «приветственного сообщения». Вы должны будете читать вывод построчно, пока не получите подсказку ("deb@ubuntu:~$").

Или, если ваш сценарий использования позволяет, вы можете использовать ChannelShell, чтобы получить сообщение, а затем использовать ChannelExec для выполнения команд.


Вам лучше поговорить с администратором сервера, чтобы сделать необходимую информацию доступной с помощью другого API (например, с помощью SSH2_MSG_USERAUTH_BANNER или даже другим способом). См. Мой ответ на SSH MOTD для пользователя , чтобы понять, как сервер может предоставить «приветственное сообщение». Если бы сервер использовал SSH2_MSG_USERAUTH_BANNER, вы могли бы использовать UserInfo.showMessage для захвата сообщения. См. Также Как прочитать баннер пары ключ-подпись SSH (для генерации пароля SSH) после подключения к хосту в Java?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...