Серверы Windows SSH время от времени зависают, ожидая ввода ключа, даже в неинтерактивном режиме?

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

Например:

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 и нажмите ENTER, он продолжит работать, даже после того, как я нажму CTRL+Z и bg Это. Иногда это закончится тогда, иногда это остановится снова через некоторое время.

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

Если я запускаю ssh из скрипта без связанного TTY, он умрет (так как некому нажать ENTER). Если я предоставлю -n возможность перенаправить стандартный ввод из /dev/nullSSH умрет сразу после подключения. Это создает дополнительную проблему, так как 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 даже в неинтерактивном режиме

0 ответов

Другие вопросы по тегам