Это относится к этому вопросу.
Я хотел регистрировать каждый раз, когда кто-то вошел в систему через 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 использует неинтерактивную оболочку, поэтому мой скрипт был не выполняется, когда я вошел в систему через ansible, поскольку ~/.bash_profile выполняется только при запуске новой интерактивной оболочки.
Затем я вставил это в конец файла .bashrc, но все равно это не сработало.
Как я могу регистрировать записи, когда кто-то регистрируется через неинтерактивную оболочку? Я имею в виду, где я должен разместить этот скрипт так, чтобы он выполнялся каждый раз, когда кто-то регистрировался через ansible?
Надеюсь, что вопрос ясен.
Все логины, интерактивные и неинтерактивные, локальные и удаленные, регистрируются в /var/log/auth.log. Я предлагаю вам использовать это вместо того, чтобы возиться с файлами запуска профиля, которые может изменить измененная учетная запись пользователя.
Когда bash запускается как неинтерактивная оболочка, он не считывает файлы запуска. Вместо этого он ищет переменную окружения $BASH_ENV и, если это указывает на файл, читает все, на что указывает. Это объясняется в разделе INVOCATION man bash:
Когда 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.
Все логины, интерактивные и неинтерактивные, локальные и удаленные, регистрируются в /var/log/auth.log. Я предлагаю вам использовать это вместо того, чтобы возиться с файлами запуска профиля, которые может изменить измененная учетная запись пользователя.
Когда bash запускается как неинтерактивная оболочка, он не считывает файлы запуска. Вместо этого он ищет переменную окружения $BASH_ENV и, если это указывает на файл, читает все, на что указывает. Это объясняется в разделе INVOCATION man bash:
Когда 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.