Я ищу доступ к открытому терминалу, открытому локально на моем компьютере, с удаленного компьютера без использования tmux или screen. Есть несколько причин для этого, самым простым из которых является то, что я продолжаю приземляться с ситуацией, когда я не планировал вперед, запускал что-то большое на своем компьютере на работе, возвращался домой, а затем хотел проверить его через ssh.
По сути, я ищу способ подключиться к терминалу, уже запущенному на компьютере, и просмотреть его вывод.
Теперь я знаю, что есть несколько потоков, которые говорят, что вы не можете этого сделать (например, этот), а другие, которые просто рекомендуют screen и tmux (например, этот , этот один или этот). То, что я ищу, - это способ прямого доступа к запущенному терминальному процессу или, по крайней мере, увидеть кешированный вывод этого терминала. Я не обязательно должен иметь возможность вводить команды в этом терминале.
Есть ли способ сделать это? В противном случае, какие-либо идеи о взломе, которые могли бы работать? Я думал, что могу найти способ автоматически записывать stdout, stderr и команды в файл (возможно, умная настройка истории bash, которая регистрирует все?)
В зависимости от процесса, выполняемого внутри терминала, вы можете добиться успеха, заглянув в состояние и действия, выполненные этим процессом, а не то, что оно отобразило в терминале.
Несколько примеров, предполагая вы каким-то образом вычислили PID (идентификатор процесса) данного процесса (например, используя pidof или ps):
Если данный инструмент запускает подкоманды один за другим, проверьте, какой из них выполняется используя ps. Если данный инструмент иногда меняет рабочий каталог, проверьте его на /proc/<PID>/cwd. Если данный инструмент работает со многими файлами в строке, проверьте, какой из них открыт в /proc/<PID>/fd. Если вы не видите ни одного в данный момент, возможно, ваш процесс только что закрыл один и вот-вот откроет следующий; еще раз проверьте содержимое этого каталога. Если команда работает с одним огромным файлом с использованием стандартных read / write системных вызовов, вы можете найти номер дескриптора файла в /proc/<PID>/fd и проверить текущее смещение в соответствующем файле в /proc/<PID>/fdinfo. Если команда использует pread / pwrite вместо этого, см. Следующую маркерную точку. Вы можете подключиться к процессу, используя strace, чтобы посмотреть, что он делает: strace -p <PID>. Вскоре после этого выйдите с помощью Ctrl + C (он завершает только strace, а не приложение, которое вы трассируете). Изучите результат и найдите подходящий материал, который может дать вам представление. Используйте, например, параметр -e trace, чтобы ограничивать этот вывод только файловыми операциями. Вы увидите, например. имена файлов, которые открываются вашими приложениями, а также смещения, где выполняются операции pread / pwrite.Поскольку вы отметили этот гном-терминал, в зависимости от версии, возможно, будет возможно просмотреть часть вывода. Из этого сообщения в блоге, где автор хотел посмотреть, что делает терминал GNOME для «неограниченного» прокрутки:
Я мог бы просто посмотреть, какие файлы gnome-terminal были открыты, поэтому lsof на помощь. Затем я обнаружил, что это было подлый, у него было несколько файлов, называемых /tmp/vteXYZ1tv, но они уже удалили их. Таким образом, вы не можете видеть их при просмотре, и они будут удалены, когда программа закроется. [...] Они могут быть восстановлены, хотя мой путь (возможно, другие), должен был сделать ls -l /proc/<gnome-terminal pid>/fd, чтобы увидеть, на что они указывают. Затем вы можете cat создать новый файл. Это всего лишь стенографическая копия вывода терминала. Без сжатия. Нет, ничего.Но в более новых версиях файлы должны быть зашифрованы. Из gnome-terminal :
Я мог просто посмотреть, какие файлы 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 - разумная оценка для хранилища, которая потребуется) , а также избавляется от проблемы конфиденциальности / безопасности в случае, если кто-то получает необработанный доступ к жесткому диску.
Из комментариев есть несколько потенциальных решений, но все они должны быть реализованы до того, как вы запустите команду в графическом терминале.
Например, см. https://bugs.launchpad.net / ubuntu / + source / gnome-terminal / + bug / 1356433
Таким образом, пользователи в пределах одного сеанса X не могут повторно подключаться к закрытым вкладкам.
Вы можете попробовать reptyr, как было предложено muru , и это отличное решение, но лучше планировать свои сеансы ssh с самого начала.
Вам нужно разработать лучшую рабочую стратегию.
Использовать экран или tmux или аналогичный. Эти инструменты были разработаны именно для этого сценария.Лично я использую экран, поскольку я знаком с ним, и по причинам, которые вы указываете, я всегда использую сеанс экрана поверх ssh, т.е. я запускаю экран и вервер действительно выходит из сеанса экрана. Часто у меня более одного сеанса экрана, по одному для каждой виртуальной машины на хосте, например.
Используйте экран или tmux или аналогичный. Эти инструменты были разработаны именно для этого сценария.VNC over ssh - https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/1356433
FreeNX - https://www.howtoforge.com/tutorial/freenx-ubuntu-14-04-trusty-tahr/
Вы можете использовать Xprahttps://www.howtoforge.com/tutorial/freenx-ubuntu-14-04-trusty-tahr/
http://xpra.org /
С помощью xpra вы можете начать, а затем снова подключить графический терминал, но снова вам нужно запустить xpra перед запуском терминала.
Просто из-за того, как построены терминалы, невозможно получить доступ ко всему, т. е. вы не можете просматривать работающий терминал и взаимодействовать с ним, если у вас нет отключаемого сеанса, работающего в указанном терминале, например screen или tmux, или если вы не запустили эту команду с протоколированием через команду script.
Что можно сделать, это частично все TTY с помощью команды sudo cat /dev/vcs1. /dev/vcs[1-6] соответствуют соответствующим консолям TTY. Это ограничено размером буфера прокрутки соответствующего TTY, что означает, что вы можете видеть только то, что хранится в памяти, до определенного количества строк. Конечно, это может быть настроено на увеличение количества строк, как показано в ответе Муру. В качестве альтернативы вам, вероятно, следует попробовать
setterm -file log.txt -dump [ttynumbers]
, о котором упоминалось в ответе muru здесь .
В конце дня, bodhi.zazen правильно отметил в своем комментарии, что ваш отказ использовать screen или tmux является самой большой проблемой. Я полностью понимаю, я часто забываю отслеживать длительные программы самостоятельно, но с некоторыми командами вы должны начать думать заранее.
В зависимости от процесса, выполняемого внутри терминала, вы можете добиться успеха, заглянув в состояние и действия, выполненные этим процессом, а не то, что оно отобразило в терминале.
Несколько примеров, предполагая вы каким-то образом вычислили PID (идентификатор процесса) данного процесса (например, используя pidof или ps):
Если данный инструмент запускает подкоманды один за другим, проверьте, какой из них выполняется используя ps. Если данный инструмент иногда меняет рабочий каталог, проверьте его на /proc/<PID>/cwd. Если данный инструмент работает со многими файлами в строке, проверьте, какой из них открыт в /proc/<PID>/fd. Если вы не видите ни одного в данный момент, возможно, ваш процесс только что закрыл один и вот-вот откроет следующий; еще раз проверьте содержимое этого каталога. Если команда работает с одним огромным файлом с использованием стандартных read / write системных вызовов, вы можете найти номер дескриптора файла в /proc/<PID>/fd и проверить текущее смещение в соответствующем файле в /proc/<PID>/fdinfo. Если команда использует pread / pwrite вместо этого, см. Следующую маркерную точку. Вы можете подключиться к процессу, используя strace, чтобы посмотреть, что он делает: strace -p <PID>. Вскоре после этого выйдите с помощью Ctrl + C (он завершает только strace, а не приложение, которое вы трассируете). Изучите результат и найдите подходящий материал, который может дать вам представление. Используйте, например, параметр -e trace, чтобы ограничивать этот вывод только файловыми операциями. Вы увидите, например. имена файлов, которые открываются вашими приложениями, а также смещения, где выполняются операции pread / pwrite.Поскольку вы отметили этот гном-терминал, в зависимости от версии, возможно, будет возможно просмотреть часть вывода. Из этого сообщения в блоге, где автор хотел посмотреть, что делает терминал GNOME для «неограниченного» прокрутки:
Я мог бы просто посмотреть, какие файлы gnome-terminal были открыты, поэтому lsof на помощь. Затем я обнаружил, что это было подлый, у него было несколько файлов, называемых /tmp/vteXYZ1tv, но они уже удалили их. Таким образом, вы не можете видеть их при просмотре, и они будут удалены, когда программа закроется. [...] Они могут быть восстановлены, хотя мой путь (возможно, другие), должен был сделать ls -l /proc/<gnome-terminal pid>/fd, чтобы увидеть, на что они указывают. Затем вы можете cat создать новый файл. Это всего лишь стенографическая копия вывода терминала. Без сжатия. Нет, ничего.Но в более новых версиях файлы должны быть зашифрованы. Из gnome-terminal :
Я мог просто посмотреть, какие файлы 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 - разумная оценка для хранилища, которая потребуется) , а также избавляется от проблемы конфиденциальности / безопасности в случае, если кто-то получает необработанный доступ к жесткому диску.
Из комментариев есть несколько потенциальных решений, но все они должны быть реализованы до того, как вы запустите команду в графическом терминале.
Например, см. https://bugs.launchpad.net / ubuntu / + source / gnome-terminal / + bug / 1356433
Таким образом, пользователи в пределах одного сеанса X не могут повторно подключаться к закрытым вкладкам.
Вы можете попробовать reptyr, как было предложено muru , и это отличное решение, но лучше планировать свои сеансы ssh с самого начала.
Вам нужно разработать лучшую рабочую стратегию.
Использовать экран или tmux или аналогичный. Эти инструменты были разработаны именно для этого сценария.Лично я использую экран, поскольку я знаком с ним, и по причинам, которые вы указываете, я всегда использую сеанс экрана поверх ssh, т.е. я запускаю экран и вервер действительно выходит из сеанса экрана. Часто у меня более одного сеанса экрана, по одному для каждой виртуальной машины на хосте, например.
Используйте экран или tmux или аналогичный. Эти инструменты были разработаны именно для этого сценария.VNC over ssh - https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/1356433
FreeNX - https://www.howtoforge.com/tutorial/freenx-ubuntu-14-04-trusty-tahr/
Вы можете использовать Xprahttps://www.howtoforge.com/tutorial/freenx-ubuntu-14-04-trusty-tahr/
http://xpra.org /
С помощью xpra вы можете начать, а затем снова подключить графический терминал, но снова вам нужно запустить xpra перед запуском терминала.
Просто из-за того, как построены терминалы, невозможно получить доступ ко всему, т. е. вы не можете просматривать работающий терминал и взаимодействовать с ним, если у вас нет отключаемого сеанса, работающего в указанном терминале, например screen или tmux, или если вы не запустили эту команду с протоколированием через команду script.
Что можно сделать, это частично все TTY с помощью команды sudo cat /dev/vcs1. /dev/vcs[1-6] соответствуют соответствующим консолям TTY. Это ограничено размером буфера прокрутки соответствующего TTY, что означает, что вы можете видеть только то, что хранится в памяти, до определенного количества строк. Конечно, это может быть настроено на увеличение количества строк, как показано в ответе Муру. В качестве альтернативы вам, вероятно, следует попробовать
setterm -file log.txt -dump [ttynumbers]
, о котором упоминалось в ответе muru здесь .
В конце дня, bodhi.zazen правильно отметил в своем комментарии, что ваш отказ использовать screen или tmux является самой большой проблемой. Я полностью понимаю, я часто забываю отслеживать длительные программы самостоятельно, но с некоторыми командами вы должны начать думать заранее.