Команды, выполняемые с использованием JSch, ведут себя иначе, чем в терминале SSH (игнорируют сообщение подтверждения «да / нет»)

Примечание. Я вхожу в систему на устройстве, а не в компьютере, поэтому вхожу в режим конфигурации (а не в режим без конфигурации).

Я использую библиотеку JSch в Java для входа в систему с помощью протокола SSH. Я вхожу в систему так:

channel = con.openChannel("shell");
channel.connect();

В некоторых случаях, когда я отправляю через оболочку команду, которой требуются разрешения su (режим конфигурации) (изменение конфигурации), этот код обходит сообщение с запросом подтверждения - это может помешать другим пользователям изменять конфигурацию. Хотя, если я ввожу команду вручную с помощью клиента / терминала SSH, я должен ввести да для подтверждения.

Кто-нибудь знает, почему?
Спасибо.

[ручной сеанс оболочки]

Когда я вхожу в систему через JSch, я могу выполнять команды конфигурации, даже если я не вставляю «да» в массив выполняемых команд.


person Asaf Bartov    schedule 01.02.2017    source источник
comment
это может быть связано: http://stackoverflow.com/questions/27634152/jsch-shellchannel-inputing-confirm-message-doesnt-work   -  person Asaf Bartov    schedule 01.02.2017
comment
Ваша редакция ничего мне не прояснила. Возможно, снимок экрана или стенограмма интерактивного сеанса SSH может прояснить, что вам нужно.   -  person Martin Prikryl    schedule 02.02.2017
comment
Надеюсь, теперь я стал понятнее ...   -  person Asaf Bartov    schedule 02.02.2017
comment
Да, но в чем собственно проблема? Если вы хотите автоматизировать команду, почему вы возражаете, что вас не беспокоит запрос подтверждения?   -  person Martin Prikryl    schedule 02.02.2017
comment
Для меня это нормально (даже лучше), что он ведет себя так, но я все же предпочел бы понять поведение. в другом примечании, я вхожу в систему как оболочка, а не как exec.   -  person Asaf Bartov    schedule 02.02.2017
comment
Смотрите мой обновленный ответ.   -  person Martin Prikryl    schedule 02.02.2017


Ответы (1)


По умолчанию JSch не запрашивает PTY (псевдотерминал).

Это может привести к тому, что некоторые команды будут вести себя иначе, чем в интерактивном SSH-терминале.

Вы можете переопределить это, используя ChannelSession.setPty .


Если вышеперечисленное не помогает, см. Также аналогичные вопросы:

person Martin Prikryl    schedule 01.02.2017