Удаленная команда SSH требует терминала

Таким образом для одного из моих серверов, большая часть того, что я делаю, отредактировать файлы с энергией. Действительно ли возможно сделать что-то как ssh me@myserver vim ? То, когда я пытаюсь сделать это, я получаю "Предупреждение, произвожу, не к терминалу", и энергия неприменима.

Я прочитал ssh страницу справочника, но удару не нравится, когда символ ESC ~C создает терминал команды.

3
задан 4 January 2016 в 15:30

1 ответ

Теория

Сессии SSH могут быть запущены с – или без – удаленный сервер, выделяющий псевдотерминал (ИМУЩЕСТВО) устройство.

Обычно, когда Вы соединяетесь с удаленным хостом через SSH (не указывая команду), Вы выполняете свою оболочку входа в систему по умолчанию после аутентификации правильно. При выполнении этой оболочки на удаленном хосте псевдотерминал автоматически выделяется для интерактивной оболочки. Это позволяет оболочке писать в экран пользователя так, чтобы это могло сделать вещи, такие как дисплей его подсказка.

Во время интерактивной сессии, SSH_TTY переменная среды установлена на узел устройства удаленного устройства ИМУЩЕСТВА, например, /dev/pts/10 и когда псевдотерминал выходит, ssh печать следующее сообщение:

Connection to <remotehost> closed.

Для неинтерактивных сессий SSH, т.е. определения команды для работы удаленного хоста не выделяется никакой псевдотерминал, и вывод команды отправляется в stdout из локального терминала. Это поведение по умолчанию работает хорошо при выполнении команд, которые просто читают вход из stdin и печать к stdout и/или stderr, например, ls, ps, и т.д. В этом случае SSH_TTY переменная среды не установлена, и я также заметил что TERM переменная среды установлена на dumb. При работе без псевдотерминала, символы ESC такой как ~C не поддерживаются; это делает безопасным для программ передать двоичные файлы, которые могут содержать эти последовательности.

Однако программы такой как vim или top потребность смочь перерисовать экран с помощью различных терминальных возможностей (обычно использующий ncurses библиотека). Для этого они требуют оконечного устройства – или устройство, которое эмулирует терминал. ssh клиентские функции a -t опция, которая вызывает выделение псевдотерминала. Это -t опция описана в странице справочника SSH:

Вызовите pseudo-tty выделение. Это может использоваться для выполнения произвольных основанных на экране программ на удаленной машине, которая может быть очень полезной, например, при реализации сервисов меню. Несколько-t опций вызывают tty выделение, даже если ssh не имеет никакого локального tty.

Заключение

Так, добавление -t опция к Вашей команде SSH - все, что необходимо сделать для предоставления Vim оконечное устройство, которое это может использовать:

ssh -t me@myserver vim
5
ответ дан 1 December 2019 в 15:36

Другие вопросы по тегам:

Похожие вопросы: