Когда вы запускаете ssh git@github.com
в обычной терминальной среде, ваш SSH-клиент (процесс ssh на вашем локальном компьютере) запросит psuedo-терминал (pty) с сервера.
GitHub всегда отрицал распределение pty.
Более старые версии (до 5.6) ssh OpenSSH будут «переходить» в режим no-pty, если сервер отклонит свой запрос выделения pty.
Более новые версии (5.6 - 5.8) ssh прерывания OpenSSH, если сервер отклоняет свой запрос на выделение pty.
Последние версии (5.9 и более поздние) ssh OpenSSH будут выполнять первое действие (продолжить), если pty-распределение было выполнено автоматически, и последнее действие (прервать), если был явный запрос для pty (задано -t
или равно RequestTTY
yes
/force
).
Вы можете указать ssh (старый или новый), чтобы он не запрашивал pty-распределение, используя опцию -T
:
ssh -T git@github.com
Затем вы должны увидеть сообщение GitHub:
Привет, <имя пользователя>! Вы успешно прошли аутентификацию, но GitHub не предоставляет доступ к оболочке.
Из объявления о выпуске 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 является фатальной.