Назад | Перейти на главную страницу

серверы ssh windows иногда зависают в ожидании ввода ключа, даже в неинтерактивном режиме?

У меня возникают спорадические проблемы при попытке установить ssh на серверы Windows (либо freesshd или Win32-OpenSSH, результаты те же). При попытке запустить неинтерактивные команды (из Debian Jessie с клиентом OpenSSH) иногда (но не всегда и через разные промежутки времени) удаленная команда останавливается и требует нажатия ВОЙТИ продолжать.

Например:

ssh -4 -T somehost "mysqldump --master-data --all-databases" > backup.sql &

на некоторых компьютерах с Windows он завершается нормально (если базы данных достаточно малы), но на более крупных он обычно останавливается (либо сразу, с backup.sql остающийся с размером 0 или через некоторое время с backup.sql имея от нескольких мегабайт до нескольких сотен мегабайт), а затем оболочка сообщит мне, что процесс клиента ssh ожидает ввода:

[1]+  Stopped                 ssh -4 -T somehost "cat mysqldump --master-data --all-databases" > backup.sql

если я принесу это fg и нажмите ВОЙТИ, он будет продолжать работать даже после того, как я CTRL+Z и bg Это. Иногда он заканчивается тогда, иногда он снова останавливается через некоторое время.

strace подтверждает, что процесс ожидает ввода TTY (на файловом дескрипторе 4, который открыт RW /dev/pts/2 или аналогичный PTY оболочки, порождающей клиента ssh), и именно поэтому процесс был остановлен.

Если я запустил ssh из скрипта без связанного TTY, он умрет (так как некому нажимать ВОЙТИ). Если я предоставлю -n возможность перенаправить stdin из /dev/null, ssh прекратит работу сразу после подключения. Это создает дополнительную проблему, так как соединения ssh, которые запускаются не с терминала (а, например, с cron (8) / atd (8)), немедленно завершатся ошибкой.

Единственный близкий вопрос, который я нашел, это вот этот, но предоставленный обходной путь (принудительное использование PTY) не совсем применим в моем случае (рассматриваемые программы изменяют свое поведение при обнаружении PTY, добавляя упорядочение ANSI, перенос слов и т. д.).

Излишне говорить, что те же команды, которые подключаются к сотням систем Debian (и других GNU / Linux), на которых работают серверы OpenSSHD, не вызывают никаких проблем (использование погоды -n или не). Проблемы возникают только тогда, когда sshd-сервер работает в Microsoft Windows.

Есть ли у кого-нибудь идеи, как исправить или обойти проблему? Я пробовал наивный подход:

yes '' | ssh -4 -T somehost "mysqldump --master-data --all-databases" > backup.sql &

но он не работает должным образом (хотя он исправляет ssh, ожидающий клавиатуры, ему также случайно удается вставить новые строки в вывод, что недопустимо). Также связанные Сервер OpenSSH в Windows отказывается работать без STDIN даже в неинтерактивном режиме