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



Попробуйте наш инструмент устранения неполадок

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



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



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

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



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

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

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



псевдотерминал

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

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

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

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

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

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

Например, используйте sshpass -p password ssh -T appuals@ssh.example.com, чтобы заставить систему работать изнутри вашего скрипта.

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

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

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

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

остановил работу

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

Теги Как сделать Linux ssh 3 минуты на чтение