Я ищу способ запустить SSH (в частности, OpenSSH, но не обязательно) и регистрировать все команды, которые я запускаю на удаленном компьютере, в локальном файле.
Запуск каждой команды как независимой команды ssh действительно занесет каждую команду в мою локальную историю, но обычно это НЕжелательно запускать, например
ssh [email protected] -- foo -a --bar baz
для каждой команды.
Я бы предпочел подключиться к серверу по ssh обычным способом, либо через сам ssh, либо через команду-оболочку, например «ssh-logging».
Я представляю себе программу, сохраняющую команды, вводимые через ssh, в файл на локальной клиентской машине, подобно тому, как это делают оболочки, например, ~/.ssh_history кажется хорошим значением по умолчанию, возможно, с перестановкой для каждой комбинации пользователь+хост, но на данный момент мне все равно, где она будет сохранять данные.
Короче говоря, я бы хотел, чтобы произошло что-то вроде следующего:
~ $ ssh [email protected]
[user@host ~]$ foo --bar
[user@host ~]$ exit
~ $ cat .ssh_history_user@host
foo --bar
exit
~ $
Существует ли что-то подобное — либо как неясная конфигурация клиента OpenSSH, либо как часть другого клиента ssh с открытым исходным кодом/libre, либо как тонкая программа-обертка, которая может просто вклиниться в поток ввода пользователя и прозрачно отправлять данные в поток ввода запущенной программы, одновременно регистрируя их? (Я слышал, что у SecureCRT есть функция ведения журнала, которая, возможно, примерно такая же, но, по крайней мере, в моей личной жизни у меня нет желания использовать инструменты, не относящиеся к свободному доступу).
решение1
Если у вас Unix, то стандартная утилитаscript
предназначен для этой цели. Если вы запустите script
без аргументов, он запустит копию вашей оболочки и запишет сеанс в файл с именем "typescript":
~ jdoe$ script
Script started, output file is typescript
bash-3.2$ date
Fri May 8 16:29:44 EDT 2015
bash-3.2$ exit
exit
Script done, output file is typescript
~ jdoe$ cat typescript
Script started on Fri May 8 16:29:42 2015
bash-3.2$ date
Fri May 8 16:29:44 EDT 2015
bash-3.2$ exit
exit
Script done on Fri May 8 16:29:45 2015
~ jdoe$
Вы можете указать файл для записи и команду для запуска вместо оболочки. Эта часть не полностью стандартизирована. На моей системе OSX вы бы запустили ее так:
script name-of-log-file command arg...
eg
script ssh-log ssh user@somehost
В обычной версии Linux это можно сделать так:
script -c 'command arg...' name-of-log-file
eg
script -c 'ssh user@somehost' ssh-log
решение2
БлагодаряОйген Риккомментарий о прокладке ssh через тройник, мне удалось реализоватьОбертка для ведения журнала вокруг sshчто делает то, что я искал.