перенаправление plink работает некорректно

Я пишу консольное приложение в 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?

Спасибо!


person Mordin    schedule 13.05.2014    source источник
comment
Что ж, после недели попыток выяснить, что происходит с вводом и выводом plink, я сдался и узнал вопрос пароля пользователя @ сервера от plink. Если я вижу этот вопрос, я просто выхожу из своей программы (оболочки), чтобы вернуться в командную строку. Совсем не то, что я хочу сделать, но, по крайней мере, я могу использовать свою программу так, пока не выясню, что делает plink.   -  person Mordin    schedule 25.05.2014
comment
Хорошо, теперь я чувствую себя немного глупо. Я, должно быть, упустил из виду опцию -batch plink. С ним plink отключит все интерактивные подсказки и не будет запрашивать пароль, если он окажется неверным. Я все еще хотел бы выяснить, что делает plink, но, по крайней мере, он не крашит мою обертку.   -  person Mordin    schedule 26.05.2014


Ответы (1)


Вот хорошая ссылка на plink:

http://the.earth.li/~sgtatham/putty/0.58/htmldoc/Chapter7.html

и вот стандартный код пакетного файла

structure: Debug\plink -[connection type] [ipaddress] -l [username] -pw [password]

example: Debug\plink -ssh 192.168.1.1 -l sudo -pw MyWeakestPasswordEver
person Joseph Poirier    schedule 06.05.2016