Запись действий на терминале - PullRequest
0 голосов
/ 03 октября 2019

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

ssh user@192.168.1.1
user@192.168.1.1's password:

ls -ltr
f1 f2 f3

#record all the above

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

while IFS="" read -e -d $'\n' -p "$USER@$HOSTNAME:$PWD$ " cmd; do 

Это захватывает ввод в cmd, но как вызвать команду и записать вывод, все еще остается загадкой.

Я открыт для любого другого языка, если есть лучший метод.

Если есть способ выбрать то, что будет записано, было бы здорово. Например:

$ls
file1 file2 file3 folder1

#record

$cat file1
Lorem ipsum dolor sit amet, consectetur adipiscing elit

#do not record

1 Ответ

1 голос
/ 03 октября 2019

Во-первых, я предполагаю, что под «действиями, которые пользователь выполняет с терминалом», вы подразумеваете ввод с клавиатуры. Затем это соответствует выводу, который вы также хотите захватить. Это не включает, например, удаление файла, когда пользователь запускает rm!

. Теперь в вашем вопросе отображается неправильное представление. Терминал обеспечивает только ввод (с клавиатуры) и вывод (на дисплей). Ввод (кроме вещей, которые он сам интерпретирует) затем направляется в программу, часто оболочку, например, zsh или fish, в то время как вывод из этой программы направляется на дисплей. Это происходит через три стандартных потока stdin, stdout и stderr. В основном вам нужна программа, которая находится между терминалом и оболочкой. Эта программа собирает данные между терминалом и оболочкой и одновременно записывает эти данные (или, по крайней мере, вывод) в файл. Это, например, то, что делает script.

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

...