В большинстве случаев вы ’получите непонятную “псевдотерминал не будет выделен, потому что stdin не является терминалом” ошибку только тогда, когда вы’выполняете какую-то команду SSH из скрипта. Если вы’ выполняете ту же команду из командной строки, то она может работать совершенно нормально.
Прежде чем продолжить, убедитесь, что вы ’добавили свой открытый ключ в SSH агент, а затем попробуйте использовать ssh снова. Возможно, вам просто не хватает ключа. С другой стороны, если это не сработает, то вам’ нужно будет сделать небольшую диагностику в вашем скрипте.
Метод 1: Принуждение & Отключение псевдо-терминала распределения
Есть пара вариантов командной строки, которые могут быстро решить проблему для вас. Попробуйте ssh -t -t -R с последующим указанием остальной части того, к чему вы пытались подключиться, чтобы принудительно выделить псевдотерминал. Например, допустим, вы собирались использовать ssh -p 80 appuals@ssh.пример.com для входа в свой аккаунт на примере.com, который, конечно, является пустышкой для документации, которой не существует.
Попробуйте запустить e.g. ssh -t -t -t -R -p 80 appuals@ssh.example.com и посмотреть, устранит ли это проблему. Конечно, вам нужно будет заменить имя на вашу реальную учетную запись и имя хоста, чтобы успешно войти в систему. Это заставит выделить терминал, так что вы не должны’ видеть, что псевдотерминал не будет выделен, потому что stdin не является ошибкой терминала.
С другой стороны, в итоге вы можете получить постоянную череду сообщений об ошибках. Некоторые пользователи отмечают, что это может показаться забавным.
Это, конечно, расстраивает, но все равно, поэтому используйте Ctrl+C, чтобы убить процесс.

Вы можете попробовать либо использовать только один ключ -t, либо увеличить количество. Если это не сработает, то замените в команде все переключатели -t на переключатель -T, e.g. ssh -T -R -p 80 appuals@ssh.пример.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.пример.com, чтобы заставить систему работать изнутри вашего скрипта.
Способ 3: Исправление ошибок управления заданиями
В некоторых случаях вы можете получить еще одно сообщение об ошибке даже после устранения всех этих ошибок. Если вы’ получаете предупреждение об отсутствии доступа к tty, а затем вам напоминают, что в вашей оболочке нет управления заданиями, то вы должны быть в состоянии работать несколько нормально.
Эта ошибка вызвана тем, что на удаленном сервере что-то не в порядке, связанное с csh, tcsh или, возможно, даже с Almquist или другой оболочкой. Вы могли не заметить этого, потому что получали другие сообщения об ошибках, но если вы не видите никаких других сообщений о псевдотерминалах, то можно продолжать работать относительно так, как вы обычно это делаете.
Вы можете не пытаться использовать Ctrl+Z в этом случае для остановки процессов, потому что может не быть способа запустить их снова. Если при выходе из системы вы получаете сообщение об ошибке, в котором говорится, что есть остановленные задания, то вы не сможете выйти из системы.

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




