这是关于这个问题。
我希望每次有人通过 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 使用非交互式 shell,所以当我通过 ansible 登录时我的脚本不会被执行,因为~/.bash_profile
只有启动新的交互式 shell 时它才会执行。
然后我将其粘贴到文件末尾.bashrc
,但仍然不起作用。
当有人通过非交互式 shell 登录时,我该如何记录条目?我的意思是我应该把这个脚本放在哪里,以便每次有人通过 ansible 登录时都执行它?
我希望问题清楚了。
答案1
当 bash 作为非交互式 shell 启动时,它不会读取任何启动文件。相反,它会查找环境变量$BASH_ENV
,如果该变量指向文件,则读取它指向的任何内容。这在 INVOCATION 部分中有解释man bash
:
例如,当 bash 以非交互方式启动以运行 shell 脚本时,它会在环境中查找变量 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 的经验,所以我不完全确定您如何使用它登录。这假设您首先启动一个正常的登录 shell,然后运行 ansible 命令。如果没有,它可能会失败。如果这不起作用,请编辑您的问题并提供有关如何通过 ansible 登录的更多信息。
答案2
所有登录(交互式和非交互式、本地和远程)都记录到/var/log/auth.log
。我建议您使用它,而不是弄乱审核用户帐户可以修改的配置文件启动文件。