Когда ssh -t не подходит вместо ssh?

15

Использование ssh -tвместо sshподключения к удаленным серверам имеет несколько преимуществ. Например, я могу непосредственно редактировать файл с помощью Vim: ssh -t host vim foo.txt, который потерпит неудачу в противном случае.

Существуют ли обстоятельства, при которых распределение (псевдо) -tty было бы плохо при использовании ssh?

Алекс Дж
источник

Ответы:

11

При передаче по входу или при получении ввода, что является типичным использованием "ssh host command". Управляющие символы могут интерпретироваться слоем TTY (например, ^ S)

niXar
источник
10

Да, иногда вы хотите установить тихое фоновое соединение, например, при настройке туннеля (например, прокси SOCKS). В таких примерах вы хотите, чтобы процесс НЕ имел tty.

Вот пример настройки переадресации портов с локального хоста на некоторый удаленный хост ...

ssh -l username -fNTL 8073:server:873

После того, как это было установлено, вы можете затем rsync на локальный хост, а не на удаленный хост, следовательно, эффективно туннелируя ваш rsync через ssh...

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

Вы сделали бы это, скажем, если rsync, выходящий в, serverбыл заблокирован, но sshне был.

Ксеркс
источник
Спасибо, это тоже было правильно, но я проголосовал за другое, поскольку это был более серьезный вопрос, который я упустил из виду.
Алекс Дж
3

В дополнение к вышесказанному ...

(1) Различные способы ухода от тильды:

"~." escape отключит вас, если у вас есть pty (-t). Для длительной команды вы можете не дать кому-то случайно остановить процесс, если наберете ~.

$ ssh hostname.tomontime.com -t sleep 60
[type ~. и он отключается]
Соединение с hostname.tomontime.com закрыто.

$ ssh hostname -T sleep 60
[Я печатаю ~. и он обрабатывает его как обычные нажатия клавиш, которые команда sleep игнорирует.]
~.
~.

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

(2) Вы просто хотите минимизировать активность pty или сетевого подключения.

При попытке перезагрузить компьютер, на котором нет ptys, вы не хотите, чтобы система пыталась выделить pty! Это также минимизирует сетевые соединения, которые должны быть закрыты (задержка перезагрузки).

Это будет работать быстрее и надежнее:
ssh -T hostname reboot

Это может иметь проблемы:
ssh -t hostname reboot

TomOnTime
источник
2

ssh -t создает псевдотерминал на удаленной машине. Это полезно, если вы объединяете команды ssh на нескольких серверах и хотите иметь реальный терминал на удаленной стороне (например, вы можете использовать 'vi').

Возможно, вы не захотите '-t', когда сценарии входа ведут себя по-разному, если есть терминал. ИМХО, это плохая практика, но я видел случаи, когда сценарий входа проверяет TTY перед 1) установкой приглашения и 2) расширением пути ко многим интерактивным приложениям.

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

ericslaw
источник