跟踪通过非交互式 shell 进行的登录

跟踪通过非交互式 shell 进行的登录

这是关于这个问题

我希望每次有人通过 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为指向包含命令的文件,它应该可以工作:

  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 的经验,所以我不完全确定您如何使用它登录。这假设您首先启动一个正常的登录 shell,然后运行 ​​ansible 命令。如果没有,它可能会失败。如果这不起作用,请编辑您的问题并提供有关如何通过 ansible 登录的更多信息。

答案2

所有登录(交互式和非交互式、本地和远程)都记录到/var/log/auth.log。我建议您使用它,而不是弄乱审核用户帐户可以修改的配置文件启动文件。

相关内容