web-dev-qa-db-ja.com

非対話型シェルを介して行われたログインを追跡する

これは this question を参照しています。

誰かがansible経由でログインするたびにログインしたかった。

スクリプトを~/.bash_profileファイルに入れました。スクリプトは次のとおりです。

#!/bin/bash

now=$(date +"%T")
echo "$USER logged in at: $now" >> /home/alphauser/ssh-entries.log

これを~/.bash_profileの最後に置きました

bash ~/ssh-login-entry.sh

ただし、ansibleは非インタラクティブシェルを使用するため、~/.bash_profileは新しいインタラクティブシェルが開始されたときにのみ実行されるため、ansibleを介してログインしたときにスクリプトは実行されませんでした。

次に、これを.bashrcファイルの最後に貼り付けましたが、それでも機能しませんでした。

誰かが非対話型シェル経由でログインしたときにエントリを記録するにはどうすればよいですか?誰かがansible経由でログインするたびに実行されるように、このスクリプトをどこに配置すればよいのかということです。

質問が明確であることを願っています。

3
luv.preet

Bashを非対話型シェルとして起動すると、起動ファイルは読み込まれません。代わりに、環境変数$BASH_ENVを探し、それがファイルを指している場合は、指しているものをすべて読み取ります。これは、man bashのINVOCATIONセクションで説明されています。

たとえば、bashを非対話形式で起動してシェルスクリプトを実行する場合、環境内で変数BASH_ENVを探し、その値が表示されている場合はその値を展開し、展開した値を読み取りおよび実行するファイルの名前として使用します。 bashは、次のコマンドが実行されたかのように動作します。

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi    

ただし、PATH変数の値はファイルの検索に使用されません
名前。

したがって、BASH_ENVがコマンドを含むファイルを指すように設定すると、動作するはずです。

  1. /etc/environmentを編集して、すべてのユーザーに対してBASH_ENVを設定します。お気に入りのエディターでファイルを開き、次の行を追加します。

    export BASH_ENV="/path/to/your/file"
    
  2. 次の内容で/path/to/your/fileを作成します。

    printf '%s logged in at: %s\n' "$USER" "$(date +'%T')" >> /home/alphauser/ssh-entries.log
    

ここで、再びansible経由でログインしてみてください。

重要:ansibleの経験がないため、それを使用してログインする方法が完全にはわかりません。これは、最初に通常のログインシェルを起動してから、ansibleコマンドを実行することを前提としています。そうでない場合、おそらく失敗します。これでうまくいかない場合は、質問を編集して、ansibleからのログイン方法に関する詳細を入力してください。

1
terdon

対話型および非対話型、ローカルおよびリモートのすべてのログインは、/var/log/auth.logに記録されます。監査対象のユーザーアカウントが変更できるプロファイルのスタートアップファイルをいじるのではなく、それを使用することをお勧めします。

0
David Foerster