Коли ssh -t не підходить замість ssh?


15

Використання ssh -tзамість sshпідключення до віддалених серверів має ряд переваг. Наприклад, я можу безпосередньо редагувати файл з vim:, ssh -t host vim foo.txtякий би не був іншим.

Чи існують обставини, за яких виділення (псевдо) -ти було б погано при використанні ssh?

Відповіді:


11

Під час передачі введення або повернення вводу назад, що є типовим використанням "ssh хостової команди". Контрольні символи можуть бути інтерпретовані шаром TTY (^ S, наприклад)


10

Так, іноді потрібно встановити безшумне фонове з'єднання, наприклад, під час налаштування тунелю (наприклад, проксі-сервер SOCKS). У таких прикладах ви хочете, щоб процес НЕ мав Tty.

Ось приклад налаштування переадресації портів з localhost на якийсь віддалений хост ...

ssh -l username -fNTL 8073:server:873

Після цього буде налаштовано rsync на localhost, а не на віддалений хост, отже, ефективно, тунелюючи вашу rsync за допомогою ssh...

rsync --port=8073 -a me@localhost::myStuff /tmp/myStuff/

Ви б це сказали, якщо rsync, який виходив, serverбув заблокований, але sshні.


Дякую, і це було правильно, але я проголосував за іншого, оскільки це було більш серйозне питання, яке я не помітив.
Alex J

3

Крім перерахованого вище ...

(1) Різні керовані втечі:

Значення "~". escape відключить вас, якщо у вас є pty (-t). Для давно запущеної команди, можливо, ви захочете не допустити, щоб хтось випадково зупинив процес, якщо він вводить ~.

$ ssh hostname.tomontime.com - не спить 60
[тип ~. і він відключається]
Підключення до hostname.tomontime.com закрите.

$ ssh ім'я хоста -спання 60
[я набираю ~. і це трактує це як звичайні натискання клавіш, які команда сну ігнорує.]
~.
~.

Спробуйте те ж саме з CTRL-C. Ви побачите, що за допомогою -t ви надсилаєте CTRL-C в режим "сну". З допомогою -T ви надсилаєте CTRL-C програмі ssh, що працює на вашій машині. Можуть бути випадки, коли це має значення (тобто програма обробляє INT інакше, ніж HUP)

(2) Ви просто хочете звести до мінімуму активності або кількість підключень до мережі.

Під час спроби перезавантажити машину, яка не має ptys, ви не хочете заохочувати систему намагатися виділити pty! Це також мінімізує мережеві з'єднання, які доведеться закрити (затримка перезавантаження).

Це буде працювати швидше та надійніше:
перезавантажити ssh -T ім'я хоста

У цьому можуть виникнути проблеми:
перезавантажити ssh -t ім'я хоста


2

ssh -t створює псевдотермінал на віддаленій машині. Це корисно, якщо ви прив'язуєте команди ssh через декілька серверів і хочете справжній термінал на далекій стороні (щоб ви могли використовувати, наприклад, "vi").

Ви можете НЕ хотіти "-t", коли сценарії входу ведуть себе по-різному, якщо є термінал. Це погана практика IMHO, але я бачив випадки, коли скрипт входу перевіряє TTY до 1) встановлення підказки та 2) розширення шляху до багатьох інтерактивних додатків.

В іншому випадку (згаданий TomOnTime вище) я фактично натрапив на випадки, коли всі TTY (ptys) використовуються. Очевидно неправильна конфігурація, але не потрібно жувати ресурс для кучки тунелів та rsyncs.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.