Esegui script (di sistema) su login SSH e / o logout

12

Mi piacerebbe che il mio server OpenSSH iniziasse uno script ogni volta che un utente si collega usando SSH, passando idealmente il nome o l'IP dell'host, così come il nome utente. Inoltre mi piacerebbe che eseguisse uno script, ogni volta che una sessione è terminata (passando il nome utente). Questi script non devono essere eseguiti nella sessione dell'utente, ma a livello di sistema.

L'idea è di fornire un avviso audio all'accesso e alla disconnessione, ad es. utilizzando espeak e per visualizzare le informazioni su un display esterno.

Ho visto che esiste un pacchetto pam-scripts , ma non sono sicuro che questo faccia ciò che voglio, né come usarlo.

    
posta sunside 29.10.2010 - 20:02
fonte

4 risposte

9

Puoi forzare un comando sui tuoi utenti SSH anziché su quello che richiedono (o sulla loro shell se non danno un comando specifico). Questo può essere fatto specificando quel comando con qualcosa come ForceCommand /root/ssh-wrapper in /etc/ssh/sshd_config (non importa dove si trova lo script o come viene chiamato, assicurati che sia eseguibile da tutti gli utenti e il file di configurazione sshd punti a esso). Devi anche riavviare / ricaricare sshd . Il comando originale è accessibile al comando forzato come $SSH_ORIGINAL_COMMAND .

Ho appena hackerato questo script insieme:

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

Ora ogni volta che eseguo il login o il logout una voce me ne parla e una voce di log viene scritta su syslog. Registra anche il comando. Puoi usare qualcosa come il seguente per "seguire" il tuo uso di sshd:

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

Nota che questo script è per lo più non testato, quindi usalo a tuo rischio! ; -)

PS: ricorda che questo script viene eseguito come utente che ha effettuato l'accesso, quindi non puoi fare tutto ciò che vuoi se lo cambi per aggiungere altre funzionalità ...

    
risposta data JanC 30.10.2010 - 05:55
fonte
1

Ho già visto questi eventi corrispondenti nel file di registro (il che consentirebbe flessibilità nell'abbinare qualsiasi cosa). Questa pagina è formattata male ma potrebbe aiutarti a iniziare: link con esound

    
risposta data kanaka 29.10.2010 - 20:47
fonte
0

(Risposta incrociata posta dalla stessa domanda su ServerFault )

Basta scrivere uno script per fare quello che vuoi e poi incollarlo in /etc/profile o possibilmente /etc/bash.bashrc a seconda delle tue esigenze. Le modifiche a tali file verranno applicate a tutti gli utenti. Non sono sicuro di sapere come procedere con la notifica del logout con questo approccio.

In alternativa, un altro modo per farlo sarebbe avere un semplice demone che monitora /var/log/auth per le sessioni ssh nuove (e di chiusura). In questo modo sarebbe in grado di inviare notifiche sia per il login che per il logout.

    
risposta data EEAA 29.10.2010 - 20:54
fonte
0

Puoi usare sshrc (man sshd, cercare sshrc)

ssh eseguirà / etc / ssh / sshrc se esiste ed è possibile eseguire uno script (o chiamare più script) da lì

puoi chiamare qualsiasi variabile bash, come $USER o ottenere l'IP tramite

read -d " " ip <<< $SSH_CONNECTION

puoi scrivere uno script per testare o registrare ciò che vuoi.

Script di logout ... beh, questo è quello che sto cercando! : D

    
risposta data higuita 06.06.2016 - 20:53
fonte

Leggi altre domande sui tag