SSH (特に OpenSSH ですが、必ずしもそうとは限りません) を実行し、リモートに対して実行するすべてのコマンドをローカルのファイルに記録する方法を探しています。
各コマンドを独立したsshコマンドとして実行すると、各コマンドがローカル履歴に記録されますが、通常、たとえば次のように実行することは望ましくありません。
ssh [email protected] -- foo -a --bar baz
すべてのコマンドに対して。
私は、ssh 自体、または「ssh-logging」などのラッパー コマンドを介して、通常の方法でサーバーに ssh で接続したいと思います。
私は、シェルが行うのと同様に、プログラムが ssh 経由で入力されたコマンドをローカル クライアント マシン上のファイルに保存することを想定しています。たとえば、~/.ssh_history は、ユーザーとホストの組み合わせごとに並べ替えられるなど、適切なデフォルトのように思えますが、現時点ではどこに保存するかはあまり気にしていません。
つまり、次のようなことが起こることを望みます。
~ $ ssh [email protected]
[user@host ~]$ foo --bar
[user@host ~]$ exit
~ $ cat .ssh_history_user@host
foo --bar
exit
~ $
目立たない OpenSSH クライアント構成として、または別のオープンソース/自由 SSH クライアントの一部として、あるいはユーザーの stdin 入力の途中に単純に配置して、ログに記録しながら実行中のプログラムの stdin に透過的に送信できる薄いラッパー プログラムとして、そのようなものが存在するのでしょうか? (SecureCRT には、おそらくこれに似たログ機能があると聞いていますが、少なくとも私生活では、FLOSS 以外のツールを使用するつもりはありません)。
答え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をteeにパイプして実装することができました。ssh のログラッパーそれは私が探していたものです。