Серверы 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/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 даже в неинтерактивном режиме