web-dev-qa-db-fra.com

Suivre les connexions effectuées via des shells non interactifs

Ceci est en référence à cette question .

Je voulais me connecter à chaque fois que quelqu'un s'est connecté via ansible.

Je mets mon script dans le fichier ~/.bash_profile. Voici le script,

#!/bin/bash

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

Je mets ceci à la fin de ~/.bash_profile,

bash ~/ssh-login-entry.sh

Cependant, ansible utilise le shell non interactif. Par conséquent, mon script n'a pas été exécuté lorsque je me suis connecté via ansible en tant que ~/.bash_profile n'est exécuté que lorsqu'un nouveau shell interactif est démarré.

Ensuite, j'ai collé ceci à la fin du fichier .bashrc, mais cela ne fonctionnait toujours pas.

Comment enregistrer les entrées lorsque quelqu'un se connecte via un shell non interactif? Je veux dire où dois-je placer ce script pour qu'il soit exécuté chaque fois que quelqu'un se connecte via ansible?

J'espère que la question est claire.

3
luv.preet

Lorsque bash est démarré en tant que shell non interactif, il ne lit aucun fichier de démarrage. Au lieu de cela, il recherche la variable d'environnement $BASH_ENV et, si cela pointe vers un fichier, lit ce qu'il pointe. Ceci est expliqué dans la section INVOCATION de man bash:

Lorsque bash est démarré de manière non interactive, pour exécuter un script Shell, par exemple, il recherche la variable BASH_ENV dans l'environnement, étend sa valeur s'il y apparaît, et utilise la valeur développée comme nom de fichier à lire et à exécuter. . Bash se comporte comme si la commande suivante avait été exécutée:

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

mais la valeur de la variable PATH n'est pas utilisée pour rechercher le fichier
Nom.

Donc, si vous définissez BASH_ENV pour qu'il pointe vers un fichier contenant votre commande, cela devrait fonctionner:

  1. Éditez /etc/environment pour définir BASH_ENV pour tous les utilisateurs. Ouvrez le fichier dans votre éditeur favori et ajoutez cette ligne:

    export BASH_ENV="/path/to/your/file"
    
  2. Créez /path/to/your/file avec le contenu suivant:

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

Essayez maintenant de vous connecter à nouveau via ansible.

Important: Je n'ai aucune expérience d'ansible, je ne suis donc pas tout à fait sûr de savoir comment vous vous connectez pour l'utiliser. Cela suppose que vous démarriez d'abord un shell de connexion normal, puis que vous exécutiez la commande ansible. Sinon, cela échouera probablement. Si cela ne fonctionne pas, modifiez votre question et donnez plus d'informations sur la manière dont vous vous connectez via ansible.

1
terdon

Toutes les connexions, interactives et non interactives, locales et distantes, sont consignées sur /var/log/auth.log. Je vous suggère de l'utiliser au lieu de manipuler les fichiers de démarrage de profil que le compte d'utilisateur audité peut modifier.

0
David Foerster