Я пишу консольное приложение в Delphi (для Windows), которое использует plink.exe в фоновом режиме для подключения к устройству через ssh (перенаправление stdin и stdout).
Моя оболочка использует компонент plinkremote (http://www.delphipraxis.net/70989-komponente-fuer-ssh-verbindung-6.html).
Чтобы начать соединение, моя оболочка запрашивает у пользователя имя пользователя и пароль, а затем запускает команду [plink -pw "password" user@server], она подключается, и я подключаюсь через свою оболочку к серверу.
Все работает, как и ожидалось, за одним исключением: если я неправильно ввожу пароль, последняя версия plink (версия 0.63) выдает «интерактивную аутентификацию клавиатуры» и запрашивает пароль. В этот момент моя оболочка перестает работать. Все, что я печатаю, не пересылается на сервер, и единственный способ выйти из этого — закрыть окно командной строки целиком. Я нашел способ отключить эту «интерактивную аутентификацию» (сохранив сеанс шпатлевки с отключенным и загрузив этот сеанс в моей обертке), но plink по-прежнему запрашивает пароль, и моя обертка перестает работать так же.
Последние несколько дней пытаюсь понять, почему он перестает работать. Я не уверен, перенаправляется ли ввод или вывод куда-то еще (только когда plink запрашивает пароль). Я бы предпочел, чтобы plink просто закрывал соединение, если оно не может аутентифицироваться, тогда я мог бы попытаться снова подключиться сразу же, надеюсь, правильно ввести пароль и подключиться. Предыдущая версия plink (версия 0.60) делает именно это. Конечно, я бы предпочел использовать последнюю версию plink, поэтому я хотел бы выяснить, что происходит, когда plink не может подключиться с заданными учетными данными.
Я искал и не смог найти решение этой проблемы - единственный вопрос, который звучит как аналогичная проблема, не получил ответа (https://stackoverflow.com/questions/19458241/redirecting-the-dev-tty-for-a-plink-command).
Кто-нибудь знает, что может быть не так или как полностью отключить вопрос пароля в plink?
Спасибо!