Intereting Posts
Установка Debian 8 Jessie UEFI Как получить список ключей, загруженных в настоящее время с помощью XKB? Можно ли безопасно использовать `find -exec sh -c`? Как заменить каждое вхождение строки инкрементным счетчиком в vim? «Преобразование» файловой системы из ext3 в ext4 Как переименовать несколько файлов с помощью сценария оболочки? Не удалось получить команду для работы с bash -c Как заменить generic-release на Fedora-release? привязка ключа tmux к содержимому панели панели программы Повторное использование похожих флагов для нескольких команд Каково максимальное значение идентификатора процесса? удалить дополнительное пространство для плитки из композитного изображения монтажа (ImageMagick)? Принудительный вывод экрана на внешний монитор при установке / загрузке linux dig возвращает другой IP-адрес при удалении «www.» из имени домена Что означает «(8)» в fsck (8)?

Инструмент для просмотра других tty для linux?

В системах BSD есть аккуратный инструмент для отслеживания других ttys:

У вас когда-либо был вход в систему пользователя, а затем попросить вас о помощи? Или вам когда-нибудь было любопытно, что ваши пользователи делают в вашей системе? Утилита watch (8) позволит вам отслеживать еще один tty, позволяя вам видеть, что делают ваши другие пользователи, и даже взаимодействовать с ними. Это обязательная утилита для каждого сетевого администратора.

К сожалению, watch – это другой зверь на Linux.

Пока у меня есть:

  • ttysnoop требует изменения / etc / inittab, который является болью
  • conspy не смог заставить его работать до сих пор
  • peekfd работает, но только один способ (вы можете видеть ввод пользователя, но не выводить)
  • Конечно, screen приятный, но пользователю нужно использовать экран …

Разве нет хорошего эквивалента для Linux?

Вы можете указать несколько файловых дескрипторов для peekfd .

например

 peekfd -n -8 -d -c 24184 0 1 2 

будет snoop на stdin, stdout и stderr pid 24184.

Параметр -c также будет прикреплен к любым дочерним процессам. Это необходимо для того, чтобы увидеть выход из них (например, увидеть вывод ls , который был запущен в процессе оболочки)

Как ни странно, я обнаружил, что он всегда удачно прикрепляется к ребенку (независимо от того, какой дочерний процесс я запускаю в snooped-tty- ls , uname , /bin/echo в отличие от встроенного echo ), но также всегда печатает ошибку message Error attaching to pid -38 (и «pid» всегда -38).

man peekfd говорит:

ДИАГНОСТИКИ

На stderr могут быть выданы следующие диагностические данные:

  Error attaching to pid ... 

При попытке присоединения к процессу произошла неизвестная ошибка. Возможно, вам потребуется root.

Похож на ошибку для меня – я запускаю peekfd как root и всегда печатает сообщение об ошибке, всегда с тем же фиктивным ( -38 ) PID.

ОСТОРОЖНО: страница руководства также говорит:

ОШИБКИ

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

SystemTap

3 строки, проблема решена, SystemTap полностью правила:

Установите SystemTap, создайте файл ptysnoop :

 #!/usr/bin/stap probe kernel.function("pty_write") { if (kernel_string($tty->name) == @1) { printf("%s", kernel_string_n($buf, $c)) } } 

Сделайте его исполняемым. Теперь, чтобы посмотреть /dev/pts/6 вы просто:

 $ sudo ptysnoop pts6 

Изменить: другие найденные решения

ttyrpld выглядит довольно солидно:

ttyrpld – это многоуровневый логгер уровня (key и screenlogger для ttys) с (a) поддержкой синхронного воспроизведения. Он поддерживает большинство типов tty, включая ptss vc, bsd и unix98 (xterm / ssh), serial, isdn и т. Д. Внедрение в ядре делает его неизбежным для пользователя по умолчанию. Он работает без накладных расходов, если демон протоколирования неактивен.

Для этого вам нужен модуль ядра.


я закончился начал писать небольшой инструмент ttylogger на основе strace , который хорошо работает для моих нужд. Все, что вам нужно, это perl и strace:

 $ sudo ttylogger pid 

Используйте это с pid для оболочки пользователя, чтобы вывести вывод из всех последующих команд.
Подробнее см. В readme .