Как решить ошибку "Псевдотерминал не будет выделен"

watch 35s
views 2

16:18, 30.05.2024

Содержание статьи
arrow

  • Причины ошибки
  • Решения для устранения ошибки
  • Применение псевдо-TTY для распределения ресурсов
  • Деактивация выделения псевдо-TTY
  • Спецификация оболочки
  • Подведем итоги

При использовании протокола Secure Shell (SSH) для доступа к удаленному компьютеру может возникнуть ошибка "Псевдотерминал не будет выделен, так как stdin не является терминалом".

Псевдотерминал - это заменитель физического терминала, сохраняющий всю его функциональность. Когда мы пытаемся подключиться к устройству через SSH, первое, что оно сделает, это попытается подключить его к терминалу. Но что, если мы хотим подключиться к удаленному устройству без терминала?

Например, мы хотим перенаправить команду стандартного ввода (stpin) на другую команду. Такой сценарий может быть связан с проблемами типа "Псевдотерминал не будет выделен...".

В этой статье мы рассмотрим, почему возникает эта ошибка и как ее исправить.

Причины ошибки

Исходя из нашего опыта, существует несколько возможных причин ошибки "Псевдотерминал не будет выделен, потому что stdin не является терминалом". Здесь мы перечислим некоторые из них.

  • Выполнение интерактивной команды на удаленном устройстве без терминала, например:
$ ssh user@host 'vim file.txt'Copy
  • Запуск команды, требующую привилегий sudo, на удаленном устройстве без терминала, например:
$ ssh user@host 'sudo apt update'Copy
  • Выполнение команды перенаправления stdin из файла или другой команды на удаленной машине:
$ ssh user@host 'cat file.txt' < input.txtCopy
  • Выполнение команды SSH из скрипта.

Решения для устранения ошибки

Несмотря на то что существует множество потенциальных причин возникновения ошибки, есть и несколько способов ее устранения. Мы рассмотрим три: принудительное выделение псевдо-TTY, деактивация выделения псевдо-TTY и спецификация оболочки.

Применение псевдо-TTY для распределения ресурсов

Чтобы устранить ошибку с помощью принудительного выделения псевдо-TTY, нам нужно использовать опцию -t для ssh. Она заставляет ssh выделять pty, даже если stdin не является терминалом.

Этот метод особенно полезен, если вы хотите выполнять команды с привилегиями sudo на удаленной машине. Следующая команда позволяет получить удаленный доступ к серверу и интерактивно отредактировать файл с помощью текстового редактора Vim:

$ ssh -t user@host 'vim file.txt'Copy

Затем вы можете обновить список пакетов (на Ubuntu OS) с помощью команды sudo и привилегий администратора, которые она предоставляет на удаленном сервере:

$ ssh -t user@host 'sudo apt update'Copy

В этих двух примерах опция -t заставляет выделить терминал. Однако опция -t не является универсальным решением; в некоторых случаях мы должны использовать двойную опцию -t, или -tt. Опция -tt упрощает выделение tty без локального tty. Такая команда полезна для выполнения перенаправления stdin на удаленной машине:

$ ssh -tt user@host 'cat file.txt' < input.txtCopy

Опция -t заставляет выделять псевдо-TTY и через нее разрешает ошибку.

Деактивация выделения псевдо-TTY

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

$ ssh -T user@host 'ls -l'Copy

Здесь команда Is -I немедленно завершает выделение.

Спецификация оболочки

Чтобы устранить ошибку "Псевдотерминал не будет выделен, потому что stdin не является терминалом", мы также можем указать оболочку на удаленной машине. Настройки SSH по умолчанию включают использование оболочки удаленного пользователя для выполнения команд. Однако некоторые оболочки не совместимы с перенаправлением stdin, что может привести к возникновению ошибок, подобных нашей.

Чтобы избежать этого, мы можем указать оболочку:

$ ssh user@host '/bin/bash -c "cat file.txt < input.txt"'Copy

Эта команда нацеливает оболочку Bash на соединение содержимого файлов file.txt и input.txt.

Подведем итоги

В этом руководстве мы рассмотрели три метода решения ошибки "Псевдотерминал не будет выделен, потому что stdin не является терминалом", такие как выделение псевдо-TTY, отключение выделения псевдо-TTY и спецификация оболочки.

Использование этих методов поможет вам выполнять команды, не сталкиваясь больше с проблемами, связанными с выделением терминала.

Поделиться

Была ли эта статья полезной для вас?

1 пользователи считают эту статью полезной

Популярные предложения VPS

-10.1%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
60 GB HDD
Bandwidth
Bandwidth
300 Gb
KVM-HDD HK 2048 Linux

6.26

При оплате за год

-10%

CPU
CPU
10 Epyc Cores
RAM
RAM
64 GB
Space
Space
400 GB NVMe
Bandwidth
Bandwidth
Unlimited
KVM-NVMe 65536 Linux

187

При оплате за год

-8.1%

CPU
CPU
6 Xeon Cores
RAM
RAM
8 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
Unlimited
wKVM-SSD 8192 Windows

31.9

При оплате за год

-24.4%

CPU
CPU
2 Xeon Cores
RAM
RAM
1 GB
Space
Space
20 GB SSD
Bandwidth
Bandwidth
300 GB
KVM-SSD 1024 HK Linux

13

При оплате за год

-10%

CPU
CPU
4 Xeon Cores
RAM
RAM
4 GB
Space
Space
50 GB SSD
Bandwidth
Bandwidth
Unlimited
KVM-SSD 4096 Linux

15.95

При оплате за год

-15.3%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
75 GB SSD
Bandwidth
Bandwidth
40 Mbps
DDoS Protected SSD-wKVM 2048 Windows

54

При оплате за год

-21.4%

CPU
CPU
6 Xeon Cores
RAM
RAM
8 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
500 GB
wKVM-SSD 8192 HK Windows

67

При оплате за год

-13.1%

CPU
CPU
2 Xeon Cores
RAM
RAM
512 MB
Space
Space
10 GB SSD
Bandwidth
Bandwidth
300 GB
KVM-SSD 512 HK Linux

7

При оплате за год

-8.1%

CPU
CPU
4 Epyc Cores
RAM
RAM
4 GB
Space
Space
50 GB NVMe
Bandwidth
Bandwidth
Unlimited
wKVM-NVMe 4096 Windows

31.9

При оплате за год

-7.3%

CPU
CPU
3 Epyc Cores
RAM
RAM
2 GB
Space
Space
25 GB NVMe
Bandwidth
Bandwidth
Unlimited
wKVM-NVMe 2048 Windows

22

При оплате за год

Другие статьи на эту тему

cookie

Принять файлы cookie и политику конфиденциальности?

Мы используем файлы cookie, чтобы обеспечить вам наилучший опыт работы на нашем сайте. Если вы продолжите работу без изменения настроек, мы будем считать, что вы согласны получать все файлы cookie на сайте HostZealot.