どのように私は私が使用するすべてのリモートコマンドのローカル、タイムスタンプを記録しておくことができますssh
(コマンドラインOpenSSHクライアントを経由開始しますかbash
)?
要件:
必須:
- サーバーのログ記録に依存しない100%クライアント側
- ログはユーザーのホームディレクトリに保存され、ユーザーごとに構成またはインストールされます。
- さまざまなユーザーやホストとの複数の同時セッションを区別するためのサポート。
- 非侵入型(毎回アクティブにする必要はなく、sshの使用を大幅に妨害しません)
高優先度:
- 出力はログに記録されないか、可能な限り除外されません。
- パスワードエントリがログに記録されていないか、ファイルが暗号化されています
- 使用された実際のコマンドを示します(タブ/履歴の完了、バックスペース、CTRL+ Cなど...が処理された後)
あった方がよい:
- 連鎖セッションのコマンドも記録します(リモート
ssh
またはsu <user>
セッション中に入力されたコマンド) - セッションの開始と終了をログに記録する必要があります
- 単純な
bash
ベースの非ルートソリューションが最適です(おそらく、コマンドのalias
またはbash
ラッパースクリプトssh
ですか?)
- 連鎖セッションのコマンドも記録します(リモート
私のスキルレベル:
- 私はプログラミングに不慣れですが、まだ
bash
「Linuxのやり方」を学んでいるので、簡単な説明のあるコードサンプルをいただければ幸いです。
可能な戦略
- キーロガー -問題:パスワードをログに記録し、タブや履歴の完了をログに記録しない(glennの回答を参照)
screen
1秒に1回、およびdiff
それらの間にスクロールバックダンプを行い、新しいスクロールバック行を見つける -問題:これを便利な自動化された方法で実装するにはどうすればよいですか?ssh "$@" | tee >(some_cleaner_function >> $logfile)
-問題:連鎖セッションで複数行のコマンドまたは履歴を処理できない、慎重なクリーンアップが必要(私の回答を参照)- 上記のいくつかの組み合わせ
例
次のSSHセッション:
user@local:~$ ssh user@remote
Last login: Tue Jun 17 16:34:23 2014 from local
user@remote:~$ cd test
user@remote:~/test$ ls
a b
user@remote:~/test$ exit
次の~/logs/ssh.log
ようなログが出力される場合があります。
2014-06-17 16:34:50 [user@remote - start]
2014-06-17 16:34:51 [user@remote] cd test
2014-06-17 16:34:52 [user@remote] ls
2014-06-17 16:34:53 [user@remote] exit
2014-06-17 16:34:53 [user@remote - end]
または、ファイルの先頭でセッションを開始するために使用されるコマンドラインを使用して、セッションごとに個別のログが作成される可能性があります。