Exécuter automatiquement des scripts sur le serveur après la connexion ssh

11

comment exécuter un script automatiquement sur le serveur peu de temps après que le système client a établi une connexion ssh avec le serveur

par exemple: supposons qu'un utilisateur se connecte à mon ordinateur à partir d'un autre système (connecté via lan) en utilisant une connexion ssh. À ce moment-là, un script (python ou shell) devrait être exécuté automatiquement dans mon système pour effectuer une validation?

Comment exécuter le script automatiquement dans le système serveur?

Passionné
la source
1
Copie possible du script d'
exécution

Réponses:

14

Vous pouvez le faire en ajoutant le paramètre suivant à votre fichier de configuration (/ etc / ssh / sshd_config).

 ForceCommand
         Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present.  The command is invoked by using the user's login shell
         with the -c option.  This applies to shell, command, or subsystem execution.  It is most useful inside a Match block.  The command originally supplied by the client is available in the
         SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of “internal-sftp” will force the use of an in-process sftp server that requires no support files when used with
         ChrootDirectory.

Une autre option consiste à utiliser les fichiers .ssh / rc par utilisateur.

Pour utiliser la méthode ForceCommand, il vous suffit d'ajouter ForceCommand /usr/bin/ownscripten bas du fichier /etc/ssh/sshd_config(sur le serveur).

Le script ressemble à ceci:

#!/bin/bash
#Script file for ssh
#
#put your commands here
echo "test" > /tmp/test.txt
#
#exit by calling a shell to open for the ssh session
/bin/bash

N'oubliez pas de modifier le script sudo chmod +x /usr/bin/ownscript

Requist
la source
Merci d'avoir répondu. Pourriez-vous s'il vous plaît donner un exemple de commande
Enthusiast
mais si la commande forcée exécute la commande dans le serveur (connexion administrateur) ou dans la connexion client? Je veux exécuter la commande dans la connexion au serveur
Enthusiast
1
La commande est émise sur le serveur. Ajoutez simplement ForceCommand /path/command.script au bas de votre configuration fera l'affaire. Cependant, j'ai rencontré qu'il exécuterait simplement cette commande, vous devez donc démarrer un shell dans votre fichier de script. Pour une meilleure lisibilité, j'ajouterai un exemple à ma réponse d'origine.
Demander
Merci. puis-je exécuter un script python au lieu d'un script shell?
Enthusiast
supposons que j'exécute ma commande personnalisée, existe-t-il un moyen de récupérer l'adresse IP et le nom de connexion de l'utilisateur (je veux savoir à cause de quelle connexion ma commande a été exécutée?
Enthusiast
4

Vous pouvez créer un /etc/ssh/sshrcfichier. Tu vois man 8 ssh. Si vous le souhaitez pour un seul utilisateur, utilisez ~/.ssh/rc.

Voici un exemple /etc/ssh/sshrcqui vous avertira via dbus lorsque quelqu'un se connecte sur votre machine. N'oubliez pas de chmod +x:

#!/bin/bash

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

notify-send -u CRITICAL "SSH connection from ${ip}" "User $USER just logged in from $ip"
leucos
la source
1

Pour exécuter un script pendant la connexion, ajoutez-le en tant qu'appel à partir du script / etc / profile. Ceci est exécuté pour chaque connexion, pas seulement pour les connexions ssh.

William Peckham
la source
Je m'inquiète uniquement des systèmes clients connectés à l'aide d'une connexion ssh
Enthusiast
1
Cela ne fonctionnera pas de manière cohérente si les utilisateurs ont des shells différents car tous les shells source / etc / profile ne sont pas tous.
bschlueter