Исправлено: псевдотерминал не будет выделен, потому что stdin не является терминалом

В большинстве случаев вы получите сбивающую с толку ошибку «псевдотерминал не будет выделен, потому что stdin не является терминалом», только когда вы запускаете какую-то команду SSH из сценария. Если вы запускаете ту же команду из командной строки, она может работать отлично.

Прежде чем идти дальше, убедитесь, что вы добавили свой открытый ключ к агенту SSH, а затем попробуйте снова использовать ssh. Возможно, вы просто потеряли ключ. С другой стороны, если это не сработает, вам нужно будет немного устранить неполадки в вашем скрипте.

Метод 1: принудительное и отключение псевдотерминального выделения

Есть пара параметров командной строки, которые могут быстро решить проблему. Попробуйте ssh -t -t -R, а затем оставшуюся часть того, к чему вы пытались подключиться, чтобы принудительно выделить псевдотерминал. Например, предположим, что вы собираетесь использовать ssh -p 80 [email protected] для входа в свою учетную запись на example.com, что, конечно же, является фиктивным для документации, которой не существует.

Попробуйте запустить, например, ssh -t -t -R -p 80 [email protected] и посмотрите, решит ли это проблему. Вам, конечно, нужно будет заменить имя на вашу фактическую учетную запись и имя хоста, чтобы успешно войти в систему. Это принудительно выделяет терминал, поэтому вы не должны видеть, что псевдотерминал не будет выделен, потому что stdin не является ошибкой терминала.

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

Это, конечно, разочаровывает, поэтому используйте Ctrl + C, чтобы остановить процесс.

Вы можете попробовать использовать только один ключ -t или увеличить число. Если это не сработает, замените в команде любые переключатели -t переключателем -T, например ssh -T -R -p 80 [email protected], и посмотрите, работает ли это.

Этот метод полностью отключает весь процесс выделения псевдотерминала, поэтому он может работать в тех случаях, когда его не принудительно. Конечно, ничего из этого не должно быть проблемой из командной строки, но обязательно сделайте пометку, когда обнаружите, какая опция работает в вашем сценарии, чтобы вы могли использовать ее в любых будущих сценариях, которые вам придется запускать для доступа к указанному серверу.

Поскольку команда ssh дала этим двум противоположным параметрам похожие имена, помните, что -t принудительно выделяет псевдотерминалы, а -T отключает его. Эти параметры чувствительны к регистру и часто необходимы изнутри сценариев, потому что для работы ssh требуется традиционный терминал TTY. Естественно, в вашем случае вы будете использовать для этой цели эмулятор терминала.

Метод 2: использование sshpass

Некоторые люди могут обнаружить, что их скрипты лучше работают с командой sshpass, которая не включена по умолчанию. Вы всегда можете установить его с помощью sudo apt-get install sshpass или sudo yum install sshpass, если вы предпочитаете попробовать или потому, что он вам нужен для вашего конкретного случая использования.

Если вы еще не используете его, возможно, он вам не нужен. Тем не менее, вы можете использовать те же методы для неожиданных сообщений об ошибках, связанных с псевдотерминальным распределением, и в такой среде.

Например, используйте sshpass -p password ssh -T [email protected], чтобы заставить систему работать изнутри вашего скрипта.

Метод 3: исправление ошибок управления заданиями

Иногда вы можете получить еще одно сообщение об ошибке даже после исправления всего этого. Если вы получаете предупреждение о том, что нет доступа к tty, а затем вам напоминают, что в вашей оболочке нет управления заданиями, вы должны иметь возможность работать нормально.

Эта ошибка вызвана что-то нерегулярным на удаленном сервере, связанное с csh, tcsh или, возможно, даже с Almquist или другой оболочкой. Возможно, вы не заметили этого, потому что получали другие сообщения об ошибках, но при условии, что вы не видите других сообщений о псевдотерминалах, можно будет продолжить работу примерно так же, как обычно.

Возможно, вы не захотите в этом случае пытаться использовать Ctrl + Z для остановки процессов, потому что не может быть способа снова запустить их. Если при выходе вы получаете сообщение об ошибке, в котором говорится, что есть остановленные задания, то вам не разрешат выйти из системы.

Используйте команды ps и kill, чтобы закрыть любые задания, которые вы не можете закрыть, при условии, что вы не против потерять работу в процессе. Теперь вы сможете выйти.

Теги Linux How-to ssh