これは 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経由でログインするたびに実行されるように、このスクリプトをどこに配置すればよいのかということです。
質問が明確であることを願っています。
Bashを非対話型シェルとして起動すると、起動ファイルは読み込まれません。代わりに、環境変数$BASH_ENV
を探し、それがファイルを指している場合は、指しているものをすべて読み取ります。これは、man bash
のINVOCATIONセクションで説明されています。
たとえば、bashを非対話形式で起動してシェルスクリプトを実行する場合、環境内で変数BASH_ENVを探し、その値が表示されている場合はその値を展開し、展開した値を読み取りおよび実行するファイルの名前として使用します。 bashは、次のコマンドが実行されたかのように動作します。
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
ただし、PATH変数の値はファイルの検索に使用されません
名前。
したがって、BASH_ENV
がコマンドを含むファイルを指すように設定すると、動作するはずです。
/etc/environment
を編集して、すべてのユーザーに対してBASH_ENV
を設定します。お気に入りのエディターでファイルを開き、次の行を追加します。
export BASH_ENV="/path/to/your/file"
次の内容で/path/to/your/file
を作成します。
printf '%s logged in at: %s\n' "$USER" "$(date +'%T')" >> /home/alphauser/ssh-entries.log
ここで、再びansible経由でログインしてみてください。
重要:ansibleの経験がないため、それを使用してログインする方法が完全にはわかりません。これは、最初に通常のログインシェルを起動してから、ansibleコマンドを実行することを前提としています。そうでない場合、おそらく失敗します。これでうまくいかない場合は、質問を編集して、ansibleからのログイン方法に関する詳細を入力してください。
対話型および非対話型、ローカルおよびリモートのすべてのログインは、/var/log/auth.log
に記録されます。監査対象のユーザーアカウントが変更できるプロファイルのスタートアップファイルをいじるのではなく、それを使用することをお勧めします。