2017-05-31 3 views
0

Good Day,connexion SSH avec succès spécifique et disconections

Je tente de se connecter connexion ssh avec succès et les temps de déconnexion pour des utilisateurs spécifiques. c'est-à-dire que je voudrais déclencher un script bash lorsque la connexion ssh est établie et quand elle est fermée.

J'ai essayé de comprendre les modules PAM.d sans beaucoup de succès, sauf que pam_exec peut être ce que je cherche.

Voici le journal de journalctl lorsque l'utilisateur je suis après déconnexions et reconnexions alors:

May 31 00:47:31 myhostname.com sshd[11517]: Connection closed by 41.113.99.123 
May 31 00:47:31 myhostname.com sshd[11517]: Transferred: sent 10160, received 12196 bytes 
May 31 00:47:31 myhostname.com sshd[11517]: Closing connection to 41.113.99.123 port 24976 
May 31 00:47:31 myhostname.com sshd[12377]: pam_unix(sshd:session): session closed for user myuser 
May 31 00:47:31 myhostname.com systemd-logind[4406]: Removed session 24778. 
May 31 00:47:52 myhostname.com sshd[11964]: Connection from 41.113.99.123 port 24989 on 178.79.130.104 port 22 
May 31 00:47:55 myhostname.com sshd[11964]: Postponed publickey for myuser from 41.113.99.123 port 24989 ssh2 [preauth] 
May 31 00:47:56 myhostname.com sshd[11964]: Accepted publickey for myuser from 41.113.99.123 port 24989 ssh2: RSA SHA256:R0y/xxxxxxxxxxxxxxxx/HuC6vZp/xxxxxxxxxxxxxx 
May 31 00:47:56 myhostname.com sshd[11964]: pam_unix(sshd:session): session opened for user myuser by (uid=0) 
May 31 00:47:56 myhostname.com systemd-logind[4406]: New session 24786 of user myuser. 
May 31 00:47:56 myhostname.com systemd[1]: Started Session 24786 of user myuser. 
May 31 00:47:57 myhostname.com sshd[11964]: User child is on pid 12009 

est-il un moyen d'exécuter un script efficace (éventuellement PAM) lorsque la « session » est fermée et ouverte pour « myuser? et si possible serait-il possible d'exposer le PID associé comme indiqué dans la dernière ligne?

Merci

Répondre

0

Ainsi, après beaucoup de recherche et d'expérimentation. Je suis venu à la réalisation que ni PAM n ou toutes les fonctionnalités de ssh et de son démon pourraient être utilisées pour atteindre mon objectif. J'ai découvert que l'établissement d'un tunnel de reverse ssh à l'aide de l'option -N n'est pas la même chose qu'un login ssh normal. Je vais essayer d'expliquer pourquoi.

Avec ça comme ça c'est ce que j'avais fait.

SSH Access Control est assez bien résumé dans cet article. Ce qui illustre où PAM s'intègre dans le processus SSH. PAM permet de divers «modules» pour compléter et améliorer le processus d'authentification/connexion. Un de ces modules auquel j'ai échappé dans ma question était pam_exec(). Ce que je trouve à la fin du fichier /etc/pam.d/sshd comme suit:

session optional pam_exec.so debug log=/tmp/pam_exec.log seteuid /usr/local/bin/login_auth 

L'idée était, lorsqu'un utilisateur établit une connexion ssh ce serait le feu d'un script qui pourrait log/prendre des mesures. Le script a fonctionné mais le "shell" dans lequel la commande est exécutée est limité en ce qu'il a seulement un ensemble minimal d'informations de session. c'est-à-dire que les variables d'environnement SSH normales comme SSH_CONNECTION n'étaient pas disponibles et que les variables d'environnement envoyées par le client distant (-o SendEnv=LC_MYVAR) n'étaient pas non plus disponibles (LC_MYVAR). Il s'avère que ceci n'est vrai que pour les connexions SSH de type tunnel inverse qui n'établissent généralement pas un shell grâce à l'option -N.

De toute façon, on pourrait très bien utiliser la méthode ci-dessus pour capturer le nom d'utilisateur et ip de toute connexion et même d'autres informations comme SSH_CONNECTION pour les connexions interactives.

Je dois clarifier à ce stade ce que j'essayais d'accomplir. J'ai plusieurs dispositifs dans le "champ" qui sont programmés pour établir un tunnel SSH quand ils le peuvent. L'idée était de surveiller le côté serveur lorsque chaque appareil se connecte et se déconnecte, ayant ainsi une visibilité sur les problèmes de connexion. Le problème est que je les ai tous mis avec le même utilisateur et sshkey. Donc les différencier n'est possible que sur le port distant que je leur ai assigné. 2222, 2223,2224,2225,2226, etc. J'ai besoin d'obtenir et de consigner ces informations sur la connexion et la déconnexion.

Enfin j'ai dû concéder et utiliser une approche journal tail comme:

tail -F /var/log/auth.log | grep "Connection closed by" | /usr/bin/myscript