回答:
接続する新しいユーザーごとにsshd
、特定のPIDを持つ新しいセッションが生成されます。を使用pstree
して、どのコマンドがどのsshd
セッションから継承されるかを出力し、このPIDをでクロスチェックでき/var/log/auth.log
ます。
例(匿名化):同じリモートユーザーを使用して、3つの同時セッションでリモートサーバーにログインしました。次に、クライアントがコマンドを実行したIPを確認しますwatch date
。
$ pstree -p | grep watch
| |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar 7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar 7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar 7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log
pstree -p
は、watch
コマンドがsshd
PID 15243で継承さgrep
れ/var/auth/auth.log
ていることを示しています。このPIDをに入力すると、このセッションを開始したのはIP 12.34.56.78でした。したがって、これは開始したユーザーでもありますwatch
。
history
特にこのユーザーの検索については、すべてのリモートユーザーが同じローカルSSHユーザーを使用しているときに、私が見ることができるものから行うことはできません。また、なりすましや無効化なども簡単に行えるため、信頼性はそれほど高くありません。履歴ファイルに保存されている場合は、cp
コマンドを探してファイルを逆にたどることができますが、そこにない場合は、何もする必要はありません。
/var/log/secure
です。
/var/log/auth.log.1
などが存在する場合は、それらに情報が含まれているかどうかを確認してください。その後、rsyslog
(sudo service rsyslog restart
)を再起動しauth.log
、それがすでに生成されているはずのが生成され始めるかどうかを確認します。SSHDは/var/log/auth.log
デフォルトでUbuntuにログを記録するため、/etc/ssh/ssd_config
またはを介してロギングターゲットを明示的に変更していない限り/etc/syslog.conf
(auth
ここでレベルが記録されているファイルを確認できます)、そこにあるはずです。そうでない場合:何かがアップしています:-)。
この2行を/ etc / profileまたは/ etc / bashrcに追加して、bashによって実行されたすべてのコマンドをログに記録できます。
whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
これは、syslogを使用して、実行したすべてのコマンドと実行したユーザーおよびそのIPアドレスを次のような形式で記録します。
Jan 8 08:43:49 xpto local3.debug root: root@192.168.x.y [29385]: ls -al [0]
さらに、以下の行をsyslog構成(/etc/syslog.conf)に追加して、local3メッセージを特定のファイルにリダイレクトできます。
local3.* /var/log/prompt.log
syslog-ng
改善されており、設定ファイルは/etc/syslog-ng/syslog-ng.conf
です。
これにはスヌーピーを使用できます。
ログメッセージ形式の定義でIP =%{env:SSH_CLIENT}を指定して、カスタム環境変数(SSH_CLIENT)をログに記録するように構成する必要があります(./configureフラグまたは2.xバージョン以降のsnoopy.iniで構成可能)。
開示:スヌーピーのメンテナはこちら。
もしbashを使っていると仮定すると、history
唯一のあなたに表示されますYOURコマンドライン履歴を。デフォルトで~/.bash_history
は、履歴を読み取ります。これは(ほとんどありませんが)のように変更することができますHISTFILE=/home/userFoo/.my_alt_history
。
あなたがボックスのルートであると仮定すると、ユーザーのすべてのディレクトリをスキャンし、その履歴を読んで、誰がそのコマンドを実行しているかを確認できます。
ps -aux | grep "cp file1.sh file2.sh"
grep: /var/log/auth.log: No such file or directory
:-(