web-dev-qa-db-fra.com

Exécuter le script (système) sur la connexion et / ou la déconnexion SSH

J'aimerais que mon serveur OpenSSH lance un script chaque fois qu'un utilisateur se connecte à l'aide de SSH, en passant de préférence le nom d'hôte ou l'adresse IP, ainsi que le nom d'utilisateur. De plus, j'aimerais qu'il exécute un script chaque fois qu'une session est terminée (en passant le nom d'utilisateur). Ces scripts ne doivent pas s'exécuter dans la session de l'utilisateur, mais à l'échelle du système.

L'idée est de donner un avertissement audio lors de la connexion et de la déconnexion, par exemple. en utilisant espeak, et pour afficher les informations sur un écran externe.

J'ai vu qu'il existe un package pam-scripts mais je ne sais pas si cela fait ce que je veux, ni comment l'utiliser.

12
sunside

Vous pouvez forcer une commande sur vos utilisateurs SSH au lieu de celui qu'ils demandent (ou de leur shell s'ils ne donnent pas une commande spécifique). Cela peut être fait en spécifiant cette commande avec quelque chose comme ForceCommand /root/ssh-wrapper dans /etc/ssh/sshd_config (peu importe où le script est situé ou comment il est nommé, assurez-vous simplement qu'il est exécutable par tous les utilisateurs et le sshd. le fichier de configuration pointe vers lui). Vous devez également redémarrer/recharger sshd. La commande originale est accessible à la commande forcée en tant que $SSH_ORIGINAL_COMMAND.

Je viens de pirater ce script ensemble:

#! /bin/sh

# add logger options when needed
log="logger -t ssh-wrapper"

# find IP address
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

$log $USER login from $ip
espeak "$USER just logged in from $ip" > /dev/null 2>&1

$log command: ${SSH_ORIGINAL_COMMAND:-Shell}
${SSH_ORIGINAL_COMMAND:-Shell}

$log $USER logout
espeak "$USER just logged out" > /dev/null 2>&1

Maintenant, chaque fois que je me connecte ou que je me déconnecte, une voix me le dit et une entrée de journal est écrite dans syslog. Il enregistre également la commande. Vous pouvez utiliser quelque chose comme ce qui suit pour "suivre" votre utilisation de sshd:

tailf /var/log/syslog | grep ssh-wrapper

Veuillez noter que ce script n'a pas été testé, utilisez-le à vos risques et périls! ;-)

PS: rappelez-vous que ce script est exécuté en tant qu'utilisateur connecté, vous ne pouvez donc pas faire tout ce que vous voulez si vous le modifiez pour ajouter plus de fonctionnalités ...

10
JanC

J'ai déjà vu ces événements correspondants dans le fichier journal (ce qui vous permettrait une certaine souplesse pour faire correspondre n'importe quoi). Cette page est mal formatée mais elle pourrait vous aider à démarrer: https://help.ubuntu.com/community/AudibleLogs#Play avec esound

1
kanaka

(Réponse croisée de la même question sur ServerFault )

Il suffit d'écrire un script pour faire ce que vous voulez et ensuite l'insérer dans /etc/profile ou éventuellement/etc/bash.bashrc en fonction de vos besoins. Les modifications apportées à ces fichiers s’appliqueront à tous les utilisateurs. Je ne sais pas comment vous vous y prendreiez pour notifier la déconnexion avec cette approche, cependant.

Une autre solution consiste à avoir un démon simple surveillant /var/log/auth pour les nouvelles sessions SSH (et les sessions de fermeture). De cette façon, il serait possible d'envoyer des notifications à la fois pour la connexion et la déconnexion.

0
EEAA

Je pense que PAM est la meilleure option. Il concerne l'ensemble du système et ne peut pas être remplacé par les fichiers de configuration de l'utilisateur.

Vous pouvez suivre ces étapes. Ils ont travaillé pour moi sur Ubuntu 14.04.4 LTS.

Courir:

$ Sudo pico /opt/custom/bin/info-session.sh

Editez ce fichier vide et ajoutez ces lignes:

#!/bin/sh

[ "$PAM_TYPE" = "open_session" ] || exit 0

INFO=$(date +"%Y/%m/%d %T $PAM_USER ($PAM_RHOST) $PAM_SERVICE $PAM_TTY") # You can customize message.

echo "PAM access: $INFO" | write user > /dev/null 2>&1 # See Note 1.

exit 0

Après cela, donnez le droit d’exécution au script:

$ Sudo chmod ugo+x /opt/custom/bin/info-session.sh

Maintenant, lancez:

$ Sudo pico /etc/pam.d/common-session

Ajoutez ces lignes à la fin du fichier:

# Modified by user:
session optional pam_exec.so /opt/custom/bin/info-session.sh

Il n'est pas nécessaire de redémarrer un service. Notez que ce script sera également exécuté lorsqu'un utilisateur se connecte depuis un terminal au lieu de SSH.

Remarque 1: Vous pouvez diriger le flux vers espeak ou tout autre processus répondant à vos besoins (courrier électronique, notification Push, etc.). ). Si vous utilisez write et que l'utilisateur est connecté, il verra les messages de sortie directement sur son terminal.

Références:
https: //blog.stalkr.net/2010/11/login-notifications-pamexec-scripting.html
https: //blog.redbranch.net/2014/06/04/pam_exec-so-execute-commands-on-user-login/

connexes:
Comment configurer une alerte e-mail lorsqu'un login ssh a réussi?
https: //serverfault.com/questions/400613/how-can-i-configure-my-server-to-notify-me-whenever-it-is-remotely -accessed -via
https: //serverfault.com/questions/395393/email-notification-about-each-ssh-connection-to-linux-server

0
Pestro

Vous pouvez utiliser le sshrc (man sshd, recherchez sshrc)

ssh exécutera le fichier/etc/ssh/sshrc s'il existe et vous pouvez exécuter un script (ou appeler plusieurs scripts) à partir de là.

vous pouvez appeler n’importe quelle variable bash, comme $USER ou obtenir l’IP via

read -d " " ip <<< $SSH_CONNECTION

vous pouvez écrire un script pour tester ou consigner ce que vous voulez.

Script de déconnexion ... eh bien, c'est ce que je recherche! :RÉ

0
higuita