Esegui gli script automaticamente nel server dopo la connessione SSH


11

come eseguire automaticamente uno script nel server subito dopo che il sistema client ha stabilito una connessione ssh con il server

per esempio: supponiamo che un utente acceda al mio computer da un altro sistema (connesso via lan) usando la connessione ssh. A quel tempo, uno script (python o shell) dovrebbe essere eseguito automaticamente nel mio sistema per eseguire una convalida?

Come eseguire automaticamente lo script nel sistema server?


Risposte:


14

Puoi farlo aggiungendo il seguente parametro al tuo file di configurazione (/ 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.

Un'altra opzione è quella di utilizzare i file .ssh / rc in base all'utente.

Per utilizzare il metodo ForceCommand è sufficiente aggiungere ForceCommand /usr/bin/ownscriptin fondo al file /etc/ssh/sshd_config(sul server).

Lo script è simile al seguente:

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

Non dimenticare di modificare la sceneggiatura sudo chmod +x /usr/bin/ownscript


Grazie per la risposta. Potresti per favore dare un comando di esempio
Entusiasta il

ma se il comando force esegue il comando nel server (login admin) o nel login client? Voglio eseguire il comando nell'accesso al server
Entusiasta il

1
Il comando viene emesso sul server. Basta aggiungere ForceCommand /path/command.script nella parte inferiore della configurazione per fare il trucco. Tuttavia, ho riscontrato che eseguirà solo questo comando, quindi è necessario avviare una shell nel file di script. Per una migliore leggibilità, aggiungerò un esempio alla mia risposta originale.
Requist

grazie. posso eseguire script Python invece di script shell?
Entusiasta il

supponiamo di eseguire il mio comando personalizzato, c'è un modo per recuperare l'indirizzo IP e il nome di accesso dell'utente (voglio sapere a causa di quale accesso il mio comando è stato eseguito?
Entusiasta

4

Puoi creare un /etc/ssh/sshrcfile. Vedere man 8 ssh. Se vuoi questo per un singolo utente, usa ~/.ssh/rc.

Ecco un esempio /etc/ssh/sshrcche ti avviserà tramite dbus quando qualcuno accede al tuo computer. Non dimenticare di 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"

1

Per l'esecuzione di uno script durante l'accesso, aggiungerlo come chiamata all'interno dello script / etc / profile. Questo viene eseguito per ogni accesso, non solo per gli accessi ssh.


Sono preoccupato solo per i sistemi client collegati che utilizzano la connessione ssh
Entusiasta il

1
Questo non funzionerà in modo coerente se gli utenti hanno shell diverse in quanto non tutte le shell sorgente / etc / profile.
bschlueter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.