Как я могу смотреть окно терминала удаленно?

8

Ранее я покинул офис с активным окном терминала, на котором выполнялся скрипт на сервере Centos 7. Теперь у меня есть SSHing из дома, и я хочу посмотреть, где он. Это возможно? Могу ли я присоединиться к тому же окну терминала отсюда?

samerivertwice
источник
Возможный дубликат: unix.stackexchange.com/questions/367370/…
Jakuje
Я также хотел бы добавить tmate.io ко всем ответам ниже
webKnjaZ
Один из вариантов: strace -e write -p 12345(замените pid интересующего вас процесса). Другой вариант: strace -e read -p 12345(заменить pid эмулятора терминала). В принципе, было бы возможно написать программу, использующую ptraceсистемный вызов для сбора информации таким же образом, как это straceделается, и записать ее непосредственно в свой собственный терминал. Я не знаю, существует ли такая программа, но она бы соответствовала требованиям, указанным в вашем вопросе.
Касперд
Один из возможных способов - включить RPC (удаленные вызовы процедур) на целевом компьютере, после чего вы можете (удаленно) подключаться к экрану и управлять им, включая отдельные окна. Примечание: это открывает уязвимость, поэтому обязательно отключите RPC, когда закончите.
user3629249

Ответы:

14

Как уже упоминалось @Sven, лучшим вариантом является использование screenили tmux. Это инструменты, известные как «терминальные мультиплексоры». Они позволяют создавать сеансы оболочки, которые можно присоединять и отсоединять от реальных входов в систему. Эти инструменты полезны не только для проверки работы с другого терминала, но и для других функций, в том числе для обмена сеансом с другим пользователем и проверки того, что ваша команда не прекратится, если вы потеряете подключение к Интернету. Если вы ищете screen, вы можете попробовать поискать «Экран GNU». Оба эти инструмента доступны в большинстве систем Linux.

Как правило, вы начинаете сеанс, а затем выполняете свою команду внутри этого сеанса. Однако, если вы уже запустили команду, возможно, вы захотите посмотреть статью о переносе запущенной команды в сеанс экрана. Я не рекомендовал бы попробовать это в первый раз на чем-то важном. Этот вопрос может быть полезен:

Перемещение уже запущенного процесса на экран

Если вы хотите проверить, запущен ли процесс, моим любимым инструментом будет strace. Этот инструмент позволяет вам видеть каждый вызов ядра, сделанный процессом. Может потребоваться некоторое умение, чтобы понять вывод, но он должен по крайней мере дать вам представление о том, запущен ли процесс, и если вы посмотрите достаточно близко, может поймать имена файлов, которые он открывает. Для этого сначала найдите PID, возможно, выполнив поиск ps aux|grep yourcommand, а затем:

strace -fp YOUR_PID

Вы можете ^ C, чтобы выйти из этого. Это может не позволить вам повторно присоединиться, но если вы просто хотите знать, что он делает, этого должно быть достаточно.

DKing
источник
Почему это не позволит вам повторно присоединиться?
HSchmale
@ HSchmale Я не уверен, что понимаю твой вопрос. Если вы имеете в виду strace, эта программа вообще не предоставляет вам терминал. Это просто показывает, как выполняются вызовы ядра. Много раз, когда я подозреваю, что процесс завис, Strace показывал мне точные файлы, над которыми он работает в данный момент, поэтому я знаю, где он находится, и что он не завис.
DKing
Я подумал, что вы не сможете присоединить к нему ремешки, но вы имели в виду, что к нему нужно присоединить терминал.
HSchmale
9

Один из способов сделать это: TMUX

Как уже указывалось в большинстве ответов - если в существующем сеансе SSH - вы используете tmux(или screen) с командой

tmux

Теперь вы находитесь в новом сеансе bash, в котором вы можете запустить свою программу / команду. Вы можете закрыть его в любое время (но не с помощью CTRL + D, а, скорее, закрыв окно) и вернуться к нему позже, создав соединение SSH с тем же пользователем на том же компьютере и написав команду

tmux attach

Вы также можете иметь несколько tmux сеансов, дав им имена с

tmux new -s myname

Вы можете увидеть список всех открытых tmuxсессий для вашего пользователя с

tmux ls

и прикрепить к названной tmuxсессии с

tmux a -t myname

Найти всеобъемлющее tmux cheat sheet здесь .

Для работающей программы

Пока что ответы, похоже, не учитывают тот факт, что вы можете переместить уже запущенный процесс в другой tmux/, screenкак указывает этот ответ . Программа, которая выполняет эту работу, называется reptyrи под Ubuntu / Debian вы можете установить ее с помощью простого

sudo apt-get install reptyr

После этого узнайте идентификатор процесса вашей работающей программы (например, с помощью topили htop), запустите tmuxсеанс и просто

reptyr PID

присоединит запущенный процесс к вашей tmuxсессии bash.

Ману Си Джей
источник
5

В будущем вы можете использовать screenили tmuxи затем присоединить текущий сеанс.

Свен
источник
3

Я использовал Byobu, и я считаю невероятно мощным. Byobu - текстовый оконный менеджер и терминальный мультиплексор с открытым исходным кодом GPLv3.

Таким образом, вы можете открыть сеанс byobu, просто набрав «byobu». Затем вы можете создать новую вкладку с помощью Ctrl + F2 и перемещаться между вкладками с помощью Ctrl + F3 для возврата, Ctrl + F4 для перехода вперед. Вы можете закрыть вкладку с помощью Ctrl + F6 или отсоединиться от сеанса с помощью Shift + F6. Позже вы снова присоединяетесь к сеансу, просто набирая «byobu» снова.

Byobu поддерживает вертикальное и горизонтальное разделение, полный экран и другие необычные функции. Он доступен в Ubuntu / Debian, CentOS / Fedora / RedHat и FreeBSD.

Дэвид Окви
источник
Кажется, немного вводит в заблуждение, чтобы назвать Бёбу терминальным мультиплексором. Это действительно просто интерфейс, tmuxи screenмногие считают, что он обеспечивает лучший пользовательский опыт, чем из коробки.
B Слой
2

Как уже было указано, я рекомендую использовать tmuxили screenв будущем, но это работает, только если вы думали об этом заранее.

Я был в вашей ситуации довольно много раз. Если терминал, который вы использовали, находился на настольном ПК вашего офиса, вы можете подключиться к нему по SSH и запустить VNC-сервер. Таким образом, вы можете хотя бы проверить открытый терминал.

Пабло Монтепагано
источник
0

Как все упоминали, tmux можно использовать. Экран не является полезным, когда вы хотите поделиться экраном с несколькими людьми.

Прежде всего, я рекомендую всем попробовать https://tmate.io/, чтобы предоставить временный доступ, даже к локальной машине. tmate поддерживает все вышеперечисленное :)

https://tmate.io/

Анто
источник