Ejecute scripts automáticamente en el servidor después de la conexión ssh

11

cómo ejecutar un script automáticamente en el servidor poco después de que el sistema cliente establezca una conexión ssh con el servidor

por ejemplo: suponga que un usuario iniciará sesión en mi computadora desde otro sistema (conectado a través de lan) usando una conexión ssh. En ese momento, ¿debería ejecutarse un script (python o shell) automáticamente en mi sistema para realizar alguna validación?

¿Cómo ejecutar el script automáticamente en el sistema del servidor?

Entusiasta
fuente

Respuestas:

14

Puede hacerlo agregando el siguiente parámetro a su archivo de configuración (/ 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.

Otra opción es utilizar los archivos .ssh / rc por usuario.

Para usar el método ForceCommand, simplemente agregue ForceCommand /usr/bin/ownscriptal final del archivo /etc/ssh/sshd_config(en el servidor).

El guión se ve así:

#!/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

No te olvides de cambiar el script sudo chmod +x /usr/bin/ownscript

Requist
fuente
gracias por la respuesta. ¿Podría dar un comando de ejemplo
Entusiasta
pero si el comando forzado ejecuta el comando en el servidor (inicio de sesión de administrador) o en el inicio de sesión del cliente? Quiero ejecutar el comando en el inicio de sesión del servidor
Entusiasta
1
El comando se emite en el servidor. Simplemente agregue ForceCommand /path/command.script en la parte inferior de su configuración hará el truco. Sin embargo, descubrí que solo ejecutará este comando, por lo que debe iniciar un shell en su archivo de script. Para una mejor legibilidad, agregaré un ejemplo a mi respuesta original.
Requiere
gracias. ¿Puedo ejecutar el script de Python en lugar del script de shell?
Entusiasta
supongamos que ejecuto mi comando personalizado, ¿hay alguna forma de recuperar la dirección IP y el nombre de usuario del usuario (quiero saber por qué inicio de sesión se ejecutó mi comando?
Entusiasta
4

Puedes crear un /etc/ssh/sshrcarchivo. Ver man 8 ssh. Si desea esto para un solo usuario, use ~/.ssh/rc.

Aquí hay una muestra /etc/ssh/sshrcque le notificará a través de dbus cuando alguien inicie sesión en su máquina. No te olvides 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
fuente
1

Para la ejecución de un script durante el inicio de sesión, agréguelo como una llamada desde el script / etc / profile. Esto se ejecuta para cada inicio de sesión, no solo para los inicios de sesión ssh.

William Peckham
fuente
Solo me preocupan los sistemas de clientes conectados mediante una conexión ssh
entusiasta el
1
Esto no funcionará constantemente si los usuarios tienen shells diferentes, ya que no todos los shells son fuente / etc / profile.
bschlueter