Ответ 1
Разница в поведении между вашей рабочей станцией и вашим сервером, вероятно, связана с использованием разных версий клиента OpenSSH (ssh
) в каждой системе (не удаленной и локальной). Клиент запрашивает pty с сервера, если не указано значение -T
, или для параметра конфигурации RequestTTY
установлено значение no
(последний был впервые доступен в OpenSSH 5.9). Разница в поведении возникает в том, как клиент имеет дело с тем, что этот запрос отклонен сервером (например, поскольку no-pty
указан в соответствующей записи authorized_keys
):
- До OpenSSH 5.6:
- клиент отобразит сообщение "Запрос запроса на распределение PTY" и
- продолжить в режиме "нет pty"
- В OpenSSH 5.6-5.8:
- клиент отобразит сообщение "Запрос запроса на распределение PTY" и
- прервать соединение
- В OpenSSH 5.9 (и позже):
- клиент отобразит сообщение "Запрос запроса на распределение PTY" и
- если
-T
не задано, аRequestTTY
-auto
(по умолчанию), тогда- продолжить в режиме "нет pty"
- else (
-T
, или параметр конфигурацииRequestTTY
-yes
илиforce
))- прервать соединение
Так как ваши серверы ssh
, как представляется, прерываются, когда его запрос на размещение pty отклонен, вероятно, работает OpenSSH 5.6-5.8 (по крайней мере, для двоичного клиента). Аналогично, поскольку ваши рабочие станции ssh
показывают предупреждение, но продолжают, вероятно, работает OpenSSH от 5.6 до 5.9 или позже. Вы можете проверить свои версии с помощью ssh -V
.
Вы можете предотвратить разницу в поведении, всегда добавляя параметр -T
, чтобы клиент (любая версия) никогда не запрашивал pty с сервера:
ssh -T [email protected]
При фактическом доступе Git клиент никогда не пытается выделить pty, потому что Git предоставит клиенту определенную команду для запуска (например, ssh server git-upload-pack path/to/repository
) вместо запроса "интерактивного" сеанса (например, ssh server
). Другими словами, no-pty
не должно было создавать проблем для фактического доступа Git; это повлияло только на тестирование проверки подлинности (в зависимости от того, какая версия клиента OpenSSH была запущена), поскольку отсутствие аргумента команды вызывает неявный запрос размещения pty (для "интерактивного" сеанса).
Из Объявление выпуска OpenSSH 5.6:
- Убейте канал, когда запросы на размещение pty терпят неудачу. Фиксированный застрявший клиент если сервер отказывается от размещения pty (bz # 1698)
bz#1698
представляется ссылкой на отчет зарегистрированный в "Portable OpenSSH" Bugzilla.
Из сообщения регистрации OpenSSH clientloop.c rev 1.234:
улучшайте наше поведение при сбое выделения TTY: если мы находимся в RequestTTY = автоматический режим (по умолчанию), а затем не обрабатывать в TTY ошибка распределения как фатальная, а просто восстановить локальный TTY в режим приготовления и продолжить. Это более грациозно на устройствах, которые никогда не выделяйте TTY.
Если RequestTTY установлен на "yes" или "force", то отказ выделить TTY является фатальным.