Отсутствие использования STDIN вызывает ошибку скручивания

С этой проблемой также можно столкнуться различными способами, особенно при работе с Windows, к которой может быть подключено несколько реализаций SSH.

Я столкнулся с этим при ssh-подключении к машине с Windows 10, на которой был запущен SSH-сервер под управлением Cygwin. Когда вы запускаете sshиз этого приглашения, он запускает версию ssh для cygwin, которая использует ~/.ssh для хранения файлов ssh ---под cygwin, то есть /home/username.

Однако, если вы запускаете gitиз того же приглашения, а Git был установлен через Windows (, что в моем случае было ), он использует файлы ssh из C :\Users\ имя пользователя.ssh.

Обычно вы запускаете ssh hostnameдля кэширования ключа хоста для git, но в этом случае это не работает, так как существуют разные известные _файлы hosts.

Когда я скопировал ключ из одного известного файла hosts _в другой, команды gitработали нормально.

3
13.02.2021, 17:19
1 ответ

Я полагаю, что apache делает что-то эквивалентное :чтению всего запроса от клиента, включая данные POST, и записи их через конвейер (, скажем ), в процесс cgi. Он также считывает ответ от cgi и отправляет его клиенту. Он делает цикл с select(), продолжая эти чтения и записи одновременно.

Когда cgi выходит и закрывает канал, выбор apache ()видит исключение при чтении из-за eof и исключение при записи. Если cgi не читает данные POST от apache, apache видит, что ожидающая запись получает ioerror, и поэтому может предположить, что cgi ведет себя плохо, и просто закрывает клиентское соединение без дальнейшей очистки.

Поскольку cgi не выдает заголовок длины содержимого -, apache не может определить длину ответа, поэтому выдает заголовок Transfer-Encoding: chunked.Этот протокол окружает каждую запись в ответе мини-заголовком -, состоящим из длины следующей записи. Протокол должен быть корректно завершён, отправив длину записи 0(0\r\n). Предположительно, именно эта последняя часть протокола отсутствует и является причиной жалоб curl.

Блокированный протокол не отображается curl, но вы можете увидеть его с помощью --rawили с помощью strace().

1
18.03.2021, 22:31

Теги

Похожие вопросы