3

コマンドの履歴に関するより詳細な情報をログに記録する方法を探していました。私の主な目的は、アプリケーションの問題をデバッグするときに大まかなサーバー タイムラインを作成するために発行されたコマンドの大まかなログを作成することです。 これは、非常に詳細な監査を目的としたものではありません。各コマンドに関する追加情報でログを強化するための優れた変更方法を提案するこの投稿 に出くわしました。ファイルに次を追加することをお勧めします。PROMPT_COMMANDhistory~/.bashrc

export PROMPT_COMMAND='hpwd=$(history 1); hpwd="${hpwd# *[0-9]*  }"; if [[ ${hpwd%% *} == "cd" ]]; then cwd=$OLDPWD; else cwd=$PWD; fi; hpwd="${hpwd% ### *} ### $cwd"; history -s "$hpwd"'

PS1これは、プロンプトが発行されたときにのみ発生することを除いて、非常にうまく機能します。非対話型シェルで動作するようにこれを強化する方法はありますか (正しい用語だと思います)。

たとえば、次のようにします。

ssh host "ls | grep home"

ls | grep homeonのエントリも作成しますが、これはプロンプトhostを介して行われないため、リンクされたソリューションは不十分です。PS1

少し調べてみましauditdた。これは素晴らしいユーティリティですが、詳細レベルは私が必要とする以上のものでした。historyログをかなり簡単に解析できたかもしれませんが、パイプ、リダイレクト、ループは、すでに報告されているものとかなり似たものに正気で再構築するのは悪夢になります。

4

1 に答える 1

1

単純なラッパーはssh、これを実現するための簡単な方法のように思えます。

shout () {
    local host
    host=$1
    shift
    ssh "$host" <<____HERE
        echo "$@" >>\$HOME/.shout-history
        bash -c "$@"
____HERE
}

または、ラッパーをローカルで実行する場合は、

shout () {
    local host
    host=$1
    shift
    echo "$@" >>$HOME/.shout-history
    ssh "$host" "$@"
}

私はこれを、あなたが知っているように、静かであるべきであることshoutに反対して呼んだ。sshこちらもご覧ください。もちろん、管理者の場合は、/usr/bin/sshわかりにくい場所に移動して/usr/local/bin/ssh、上記のようなコンテンツでユーザーにを実行させることができます。知識のあるユーザーがバイパスするのは簡単ですが、あなたが本当に過酷な人であれば、それを難し​​くする方法があります。

リモートホストの管理者であれば、/usr/local/bin/shoutたとえば、すべてのユーザーにシェルとして実行させ、多かれ少なかれ類似したものを追加することができます。

#!/bin/bash
echo "$@" >>/home/root/im.in.ur.sh.reading.ur.seekrit.cmds.lol
exec /bin/bash -c "$@"

トランスクリプトファイルが誰でも書き込み可能であるが、誰でも読み取り可能ではないことを確認してください。

于 2013-01-07T21:59:28.723 に答える