クライアント側で SSH 経由で実行されるログコマンド

クライアント側で SSH 経由で実行されるログコマンド

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 のログラッパーそれは私が探していたものです。

関連情報