Вопрос Можно ли получить доступ к открытому терминалу на компьютере через SSH?


Я ищу доступ к открытый терминал, открытый локально на моем компьютере, с удаленного компьютера без использования tmux или screen, Есть несколько причин для этого, самым простым из которых является то, что я продолжаю приземляться с ситуацией, когда я не планировал вперед, запускал что-то большое на своем компьютере на работе, возвращался домой, а затем хотел проверить его через ssh.

По сути, я ищу способ подключиться к терминалу, уже запущенному на компьютере, и просмотреть его вывод.

Теперь я знаю, что есть несколько потоков, которые говорят, что вы не можете этого сделать (например,  вот этот ) и другие, которые просто рекомендуют screen а также tmux (как вот этот, вот этот или  вот этот). То, что я ищу, - это способ непосредственно доступ к рабочему терминальному процессу или, по крайней мере, просмотр кэшированного вывода этого терминала. Я не обязательно должен иметь возможность вводить команды в этом терминале.

Есть ли способ сделать это? В противном случае, какие-либо идеи о взломе, которые могли бы работать? Я думал, что могу найти способ автоматически записывать stdout, stderr и команды в файл (возможно, умная настройка в истории bash, которая регистрирует все?)


2
2017-07-27 21:59


происхождения


Ну, это именно то, для чего предназначены экраны и tmux, чтобы использовать один из этих двух вариантов. Единственный другой вариант - использовать Freenx или другой сервер VNC поверх ssh, который будет всего рабочего стола, но, честно говоря, ваша проблема заключается в вашем отказе от использования экрана, и решение простое, используйте экран. - Panther
Да, это справедливо, и спасибо за совет. Я все еще считаю, что жизнеспособное решение должно быть возможным, и мне было интересно узнать, какие варианты были доступны - не только потому, что это случается со мной иногда, но это случается с людьми, с которыми я работаю. Итак, в данной ситуации, когда слишком поздно для умного решения, включающего экран или tmux, что мы можем сделать, чтобы получить вывод терминала обратно? Можно ли снова получить доступ к этому терминалу? - ck4e
Ну, проблема в том, что вы не запускаете экран, если бы вы были, у вас не было бы этой проблемы в первую очередь. поэтому ваши рассуждения круговые. Поскольку я отказываюсь использовать экран, у меня есть проблема, что экран был разработан для решения. После этого невозможно сделать это. Перед запуском команды в терминале запустите VNC-сервер, такой как FreeNX или перед запуском экрана запуска команды или tmux. Вы можете попробовать Xpra - xpra.org но снова он должен работать до того, как вы запустите свой терминал. - Panther
Если это невозможно, то это невозможно. Я не совсем уверен, как сделать это более ясным - не то, что я избегаю экрана или tmux или других решений там. Я очень рад их использовать и, скорее всего, установлю это позже, чтобы я снова не сталкивался с такими проблемами. Но остается академический вопрос - есть ли способ получить доступ к контенту терминала, если он не запускает экран или tmux. Я не знаю, есть ли, но кажется правдоподобным, что может быть. Отсюда вопрос. - ck4e
Возможно - muru отправил предложение, но данные, скорее всего, зашифрованы. «ls -l / proc / <gnome-terminal pid> / fd, чтобы увидеть, на что они указывают, и затем вы можете сделать это, чтобы создать новый файл. Это всего лишь текстовая копия вывода терминала. Нет сжатия. " но затем «vte-0.40 (который, скорее всего, появится в Ubuntu 15.10 W.W.), сжимает и шифрует эти файлы». , Вы попробовали это? Полагаю, вы можете разбить шифрование. Возможно ли, что это лучший вопрос. - Panther


ответы:


Просто из-за того, что терминалы построены, невозможно получить доступ все, то есть вы не можете просматривать текущий терминал а также взаимодействовать с ним, если у вас нет отключаемого сеанса, работающего в указанном терминале, например screen или tmux сеанс, или если вы не запустили эту команду с протоколированием через script команда.

Что можно сделать, это частично Посмотреть TTY через sudo cat /dev/vcs1 команда. /dev/vcs[1-6] соответствуют их соответствующим TTY-консолям. Это ограничено размером буфера прокрутки соответствующего TTY, что означает, что вы можете видеть только то, что хранится в памяти, до определенного количества строк. Конечно, это может быть настроено на увеличение количества строк, как показано в Ответ муру здесь, Кроме того, вы, вероятно, должны попробовать

setterm -file log.txt -dump [ttynumbers]

который упоминался в этот вопрос ssh,

В конце концов, bodhi.zazen правильно отметил в своих комментарий, что ваш отказ использовать screen или tmux это самая большая проблема. Я полностью понимаю, я часто забываю отслеживать длительные программы самостоятельно, но с некоторыми командами вы должны начать думать заранее.


4
2017-07-27 23:39



Большое вам спасибо за ваш ответ. Я пробовал оба cat /dev/vcs1 а также setterm с ограниченными результатами, но, конечно, лучше, чем у меня раньше. Опять же, я бы предостерег от того, чтобы назвать это отказом - я признаю, что могу использовать его, а иногда и делать. Мой вопрос был больше того, какие варианты доступны мне, если я не имел инициированный экран или tmux. Я взглянул на скрипт, и один из моих вариантов на данный момент состоит в том, чтобы добавить простую функцию в мой .bashrc, чтобы инициировать ведение журнала общего вывода терминалов в каком-то файле журнала. Однако общее решение остается интересным. - ck4e
Я мог бы, конечно, добавить screen командовать моим .bashrc - возможно, что-то эти линии, Я понимаю, что такое решение не является идеальным, и меня будут интересовать другие варианты. Это, конечно, не общее, и не будет разрешать общую проблему, если никто не начал screen или tmux - ck4e


Поскольку вы отметили это , в зависимости от версии, можно будет просмотреть часть вывода. Из это сообщение в блоге, где автор хотел посмотреть, что делает терминал GNOME для «неограниченного» прокрутки:

Я мог бы просто посмотреть, какие файлы gnome-terminal был открыт, поэтому lsof   в помощь. Тогда я обнаружил, что это было подлый, у него было несколько   файлы, называемые /tmp/vteXYZ1tv но он уже удалил их.   Таким образом, вы не можете видеть их во время просмотра, и они будут удалены, когда   программа закрывается. [...] Они могут быть восстановлены, хотя, мой путь (там   вероятно, другие), должен был сделать ls -l /proc/<gnome-terminal pid>/fdчтобы увидеть, на что они указывают. Тогда ты можешь cat это сделать   новый файл. Это всего лишь стенографическая копия вывода терминала. нет   сжатия. Нет, ничего.

Но в более новых версиях файлы должны быть зашифрованы. Из этот ответ:

vte-0,40 (что, скорее всего, появится в Ubuntu 15.10 W.W.)   сжимать и шифровать эти файлы. Это сократит требуемый   хранения до примерно четвертой части (если ваше приложение создает X   количество данных в виде обычного текста, где-то между X / 4 .. X / 3 является   разумная оценка для хранения, которая потребуется), а также   избавляется от проблемы конфиденциальности / безопасности в случае, если кто-то получает доступ к сыру   на жесткий диск.

Если вы хотите только выход в будущем, вы можете попробовать перетащить процесс на новый TTY с использованием reptyr,


2
2017-07-28 03:16





Из комментариев есть несколько потенциальных решений, но все они должны быть реализованы до того, как вы запустите команду в графическом терминале.

Например, см. https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/1356433

Поэтому пользователи в пределах одного сеанса X не могут повторно подключаться к закрытым вкладкам.

Вы можете попробовать reptyr, как было предложено muru, и это крутое решение, но лучше планировать свои сеансы ssh лучше с самого начала.

Вам нужно разработать лучшую рабочую стратегию.

  1. Используйте экран или tmux или аналогичный. Эти инструменты были разработаны именно для этого сценария.

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

  1. Используйте сервер VNC. Вы можете запускать сеанс через ssh (VNC-over-SSH) или использовать FreeNX, который быстрее и безопаснее. НЕ ИСПОЛЬЗУЙТЕ СЕРВИС VNC НА «ИНТЕРНЕТ» БЕЗ SSH ИЛИ FREENX

VNC over ssh - https://www.cyberciti.biz/tips/tunneling-vnc-connections-over-ssh-howto.html

FreeNX - https://www.howtoforge.com/tutorial/freenx-ubuntu-14-04-trusty-tahr/

  1. Вы можете использовать Xpra

https://help.ubuntu.com/community/Xpra

http://xpra.org/

С помощью xpra вы можете начать, а затем снова подключить графический терминал, но снова вам нужно запустить xpra, прежде чем запускать терминал.


0
2017-07-28 19:35



Да, VNC, экран, tmux - все это хорошие решения с небольшой предусмотрительностью. Однако эта ошибка не подразумевает, что содержимое терминала невозможно получить доступ - это просто означает, что управление вкладкой в ​​терминале gnome, пожалуй, немного затруднительно. Несмотря на это, я действительно согласен с вашей точкой зрения о лучшей рабочей стратегии, и я изучал различные варианты этого. Я не уверен, куда идти, но я склоняюсь к началу сеанса экрана при запуске и с помощью команды .bashrc для присоединения к сеансу с каждым новым терминалом. - ck4e
Думаю, я бы предпочел рекомендовать X2go, чем FreeNX. - Jo-Erlend Schinstad


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

Несколько примеров, предполагая, что вы каким-то образом вычислили PID (идентификатор процесса) данного процесса (например, используя pidof или ps):

  • Если данный инструмент запускает подкоманды один за другим, проверьте, какой из них выполняется, используя ps,

  • Если данный инструмент иногда меняет рабочий каталог, проверьте, что в /proc/<PID>/cwd,

  • Если данный инструмент работает с множеством файлов подряд, проверьте, какой из них открыт в /proc/<PID>/fd, Если вы не видите ни одного в данный момент, возможно, ваш процесс только что закрыл один и вот-вот откроет следующий; еще раз проверьте содержимое этого каталога.

  • Если команда работает с одним огромным файлом, используя стандартный read/write syscalls, вы можете найти номер дескриптора файла в /proc/<PID>/fd и проверьте текущее смещение в соответствующем файле в /proc/<PID>/fdinfo, Если команда использует pread/pwrite вместо этого увидите следующую точку.

  • Вы можете подключиться к процессу, используя strace посмотреть, что он делает: strace -p <PID>, Выйти вскоре после использования Ctrl+С (он заканчивается strace только, а не приложение, которое вы отслеживаете). Изучите результат и найдите подходящий материал, который может дать вам представление. Используйте, например, -e trace возможность ограничивать этот вывод только файловыми операциями. Вы увидите, например. имена файлов, которые открываются вашими приложениями, а также смещения, где pread/pwrite операции происходят.


0
2017-10-26 10:36