Ошибка “Запрос выделения PTY не удался” при попытке подключения с помощью SSH с ControlMaster

Вопрос или проблема

Я пытаюсь войти в Ubuntu desktop. Я получаю следующее сообщение об ошибке:

Заявка на выделение PTY не удалась

Что это значит и как подключиться к рабочему столу?

Вот вывод с -v:

debug1: Чтение конфигурационных данных /home/evag/.ssh/config  
debug1: /home/evag/.ssh/config строка 1: Применение параметров для *
debug1: Чтение конфигурационных данных /etc/ssh/ssh_config 
debug1: /etc/ssh/ssh_config строка 19: Применение параметров для *
debug1: auto-mux: Попытка использования существующего мастера
debug1: mux_client_request_session: идентификатор мастер-сессии: 2
Заявка на выделение PTY не удалась

Учитывая вывод выше с включенной опцией подробного вывода, я думаю, что понимаю, откуда возникает проблема: у меня есть два компьютера, A и B. Я использую ControlMaster на A, чтобы поддерживать устойчивые соединения с B. A подключается к B безопасным способом, с command=/bin/false, чтобы ограничить использование A на B (у него есть только возможности пересылки).

Тем не менее, я хочу подключиться к ssh с A на B, не используя эту идентификацию (-i), но проблема в том, что поскольку существует постоянное соединение, оно использует существующее соединение независимо от опции, которую я указываю в -i, поэтому я не могу выделить PTY.

Так что, учитывая, что существует уже установленный ControlMaster и защищенное соединение с A на B, как я могу получить другое соединение с A на B, но на этот раз с полными правами?

Я предполагаю, что вы указали ControlPath и ControlMaster в ~/.ssh/config? В этом случае ssh всегда будет проверять ControlPath при попытке доступа к этому серверу. Насколько я понимаю, это стандартный процесс, если ControlPath существует, даже если ControlMaster=no установлен (потому что он автоматически устанавливается в ‘no’, если ControlPath существует, чтобы не пытаться создать новый ControlMaster).

Вам нужно будет указать новый ControlPath:

ssh -o ControlPath=~/.ssh/%r@%h:%p-newsession server

Однако: я делаю то же самое, но не нужно указывать запускать ‘false’, я просто использую доступные параметры в SSH. Посмотрите страницу man для способа создать пересылающие соединения без запуска оболочки. Когда это делается правильно, PTY выделяется только по необходимости, даже через одно и то же контрольное соединение.

-f      Запрашивает ssh уйти в фоновый режим непосредственно перед выполнением команды.
-N      Не выполнять удаленную команду. Это полезно только для пересылки портов.
-T      Отключить выделение псевдотерминала.

Таким образом, в моем случае (вместе с другими, не связанными опциями):

ssh -fNT server

где ~/.ssh/config уже указывает на ControlPath.

Ответ или решение

Ошибка "PTY allocation request failed" при попытке подключения по SSH с использованием ControlMaster возникает из-за того, что вы пытаетесь получить доступ к удаленной машине, где уже установлено ограничение на выделение псевдотерминалов (PTY). Это происходит, когда на сервере B у вас есть существующий контрольный сеанс, который ограничивает права доступа, например, с помощью опции command=/bin/false.

Что это значит?

Когда вы используете SSH с ControlMaster, SSH пытается переиспользовать уже существующее соединение для установления нового сеанса. Если первое соединение использует настройки, которые не позволяют выделить псевдотерминал (как это сделано с command=/bin/false), то при попытке нового логина вы получите сообщение об ошибке "PTY allocation request failed".

Как исправить проблему?

Для исправления ошибки вы можете использовать несколько различных подходов:

  1. Создание нового ControlPath:
    Чтобы обеспечить возможность установления нового соединения с полными правами, вам нужно указать другой путь для ControlPath, который будет отличаться от уже существующего. Например:

    ssh -o ControlPath=~/.ssh/%r@%h:%p-newsession username@server

    Этот подход позволит создать новый сеанс, который не будет конфликтовать с уже существующим.

  2. Использование опций для SSH:
    Если ваша цель состоит в том, чтобы просто установить перенаправление портов или соединение без необходимости выделять псевдотерминал, вы можете использовать следующие опции SSH:

    • -f: Переводит SSH в фоновый режим перед выполнением команды.
    • -N: Не выполняет удаленную команду, что полезно для создания только перенаправления портов.
    • -T: Отключает выделение псевдотерминала.

    Вы можете сформировать команду следующим образом:

    ssh -fNT username@server

    Убедитесь, что в вашем ~/.ssh/config уже указан правильный ControlPath.

  3. Настройка вашего SSH-сервера:
    Проверить конфигурацию вашего SSH-сервера на стороне B и убедиться, что у вас есть необходимые права для выделения псевдотерминала. Вы можете изменить настройки в файле /etc/ssh/sshd_config, если это необходимо, после чего потребуется перезапустить SSH-сервер.

Заключение

Ошибка "PTY allocation request failed" может быть решена несколькими методами, в зависимости от ваших требований к соединению. Осуществление нового подключения через измененный ControlPath или использование специфических опций SSH может эффективно обойти ограничения без необходимости прекращения существующих сеансов. Всегда проверяйте ваши настройки SSH для обеспечения совместимости и правильной работы.

Оцените материал
Добавить комментарий

Капча загружается...