以前質問しましたが、満足のいく回答が得られませんでした。 別のコンピュータで実行されたSSHコマンドを表示するには?
だから今回は確かに聞きたいです。
SSHとそのユーザー/ IPを介してサーバー上で実行されたコマンドをどのように表示できますか?私は次のようなものを探しています:
#tail .bash_history 192.168.1.101 : vi /etc/ssh/sshd_config 192.168.1.102 : ls -l 192.168.1.101 : cd .ssh 192.168.1.101 : systemctl reload sshd.service 192.168.1.102 : service --status-all
など...
答え1
この質問が面白くてグーグルして見つけました。これ。
より正確には、この行をsshd_configに追加する必要があります。
ForceCommand logger -p user.notice "$SSH_ORIGINAL_COMMAND"
によるとman sshd_config
:
ForceCommand は、
クライアントおよび ~/.ssh/rc (存在する場合) によって提供されるすべてのコマンドを無視し、ForceCommand で指定したコマンドを強制的に実行します。コマンドは、ユーザーのログインシェルと-cオプションを使用して呼び出されます。これはシェル、コマンド、またはサブシステムの実行に適用されます。 Matchブロック内で最も便利です。クライアントが最初に提供したコマンドは、SSH_ORIGINAL_COMMAND環境変数にあります。 Internal-sftp コマンドを指定すると、ChrootDirectory で使用する際にサポートファイルを必要としないインプロセス SFTP サーバーが強制されます。デフォルトはなしです。
私のDebian rsyslogインストールuser.*に記録されました。/var/log/user.log
上記のコマンドは、logger
元のコマンドの場所でコマンドを実行することに注意してください。コマンドを記録したい場合そしてその後、実行するには、次の行に沿って操作を実行する必要があります(bash
使用可能であると仮定/bin/bash
)。
ForceCommand /bin/bash -rc 'logger -p user.notice "$SSH_ORIGINAL_COMMAND"; $SSH_ORIGINAL_COMMAND'
制限されたシェルよりも制限的なラッパースクリプトを使用したり、対話型ログインの場合sshrc
(/etc/ssh/sshrc
)ファイルがロギングを実装する別のオプションかもしれません。
答え2
この試み(https://askubuntu.com/questions/93566/how-to-log-all-bash-commands-by-all-users-on-a-server)。/etc/bash.bashrc
ファイルを編集して行を追加します
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
ファイルの一番下に保存して