Виправлення: Псевдо-термінал не буде виділено, оскільки stdin не є терміналом

У більшості випадків ви отримуєте заплутану помилку "псевдотермінал не буде призначений, оскільки stdin не термінал", лише коли ви виконуєте якусь команду SSH із сценарію. Якщо ви виконуєте одну і ту ж команду з командного рядка, це може працювати абсолютно нормально.

Перш ніж йти далі, переконайтеся, що ви додали свій відкритий ключ до агента SSH, а потім спробуйте знову використовувати ssh. Можливо, вам просто не вистачало ключа. З іншого боку, якщо це не спрацьовує, вам доведеться трохи усунути неполадки у вашому сценарії.

Спосіб 1: Примусове та вимкнення розподілу псевдо-tty

Існує пара варіантів командного рядка, які можуть швидко вирішити проблему. Спробуйте 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 пароль ssh -T [email protected], щоб змусити систему працювати зсередини вашого сценарію.

Метод 3: Виправлення помилок в управлінні завданнями

Іноді ви можете отримати одне інше повідомлення про помилку навіть після того, як все це виправили. Якщо ви отримуєте попередження про відсутність доступу до tty, і тоді вам нагадують, що у вашій оболонці немає контролю за роботою, ви повинні мати змогу працювати дещо нормально.

Ця помилка викликана тим, що на віддаленому сервері є щось нерегулярне, пов’язане з csh, tcsh або, можливо, навіть з Almquist або іншою оболонкою. Можливо, ви цього не помічали, оскільки отримували інші повідомлення про помилки, але за умови, що про псевдотермінали ви не бачите жодних інших, це має мати можливість продовжувати відносно так, як зазвичай.

Можливо, ви не захочете спробувати використовувати Ctrl + Z в цьому випадку, щоб зупинити процеси, однак, можливо, немає можливості їх знову запустити. Якщо під час виходу ви отримуєте повідомлення про помилку, яке свідчить про зупинені завдання, тоді ви не зможете вийти з системи.

Використовуйте команди ps та kill, щоб закрити будь-які завдання, які ви не можете закрити, припускаючи, що ви не проти втратити роботу в процесі. Ви зможете вийти зараз.

Теги Linux ssh