Voglio visualizzare un banner (messaggio di benvenuto) per gli utenti SSH con un messaggio di benvenuto specifico per ciascun utente.
Voglio visualizzare un banner (messaggio di benvenuto) per gli utenti SSH con un messaggio di benvenuto specifico per ciascun utente.
Risposte:
Non hai specificato quale server SSH stai usando. Sto assumendo OpenSSH.
Si noti che il banner SSH e il MOTD sono due cose diverse.
Sebbene quasi indistinguibili in un terminale SSH, hanno un comportamento diverso, ad esempio in un client SFTP.
Il MOTD è solo un testo stampato su un terminale interattivo. Pertanto, non verrà (e non potrà) essere inviato ai client SFTP, ad esempio (ne parleremo più avanti).
Il MOTD è hardcoded /etc/motd
in OpenSSH. Puoi accenderlo / spegnerlo solo a livello globale, usando la PrintMotd
direttiva.
Su alcuni sistemi Linux, tuttavia, PrintMotd
è sempre spento e il MOTD viene invece stampato dallo stack PAM (utilizzando il pam_motd
modulo). In questo caso è possibile disattivarlo tramite /etc/pam.d/sshd
o specificare un motd=
percorso personalizzato come parametro del modulo.
Il banner SSH è una funzione SSH 2.0 speciale, inviata in un pacchetto SSH specifico (SSH2_MSG_USERAUTH_BANNER).
Pertanto, anche i client non terminali, come i client SFTP, possono elaborarlo e mostrarlo all'utente. Guarda ad esempio come viene visualizzato il banner nel client SFTP / SCP di WinSCP .
Il banner SSH è configurabile per utente (o gruppo o altri criteri) sshd_config
nell'uso Banner
delle Match
direttive e :
Match User username1
Banner /etc/banner_user1
Match User username2
Banner /etc/banner_user2
Vedi anche Disabilita banner ssh per utenti specifici o ips .
Ovviamente, puoi anche utilizzare un'implementazione personalizzata per il messaggio / banner. È sufficiente stampare un messaggio selezionato utilizzando la logica personalizzata da uno script di profilo globale.
Come nel MOTD, questo non funzionerà per le sessioni non interattive (SFTP e simili).
Ancora più importante, non solo non funzionerà, è necessario assicurarsi di stampare il messaggio solo per un terminale interattivo. Cosa fa OpenSSH automaticamente per /etc/motd
. Utilizzare uno script di profilo globale che viene eseguito solo per un terminale interattivo oppure stampare il messaggio in modo condizionale in base al valore della TERM
variabile di ambiente.
Se si stampa il messaggio per una sessione non interattiva, si interrompe qualsiasi client che utilizza un protocollo rigoroso, come SFTP o SCP, poiché il client tenterà di interpretare il messaggio di testo come messaggio di protocollo, fallendo male.
Vedere ad esempio la descrizione di tale problema nella documentazione del client SFTP / SCP WinSCP .
(Sono l'autore di WinSCP)
Puoi anche usare il "$HOME/.ssh/rc"
file per archiviare ciò che vuoi fare
echo "echo Hello World" > /home/pluto/.ssh/rc
ssh pluto@localhost
Last login: Thu Dec 18 08:46:16 2014 from localhost.localdomain
Hello World
Quindi, puoi avere un ssh rc per ogni utente.
groups|awk '{print $1}'
cat /etc/motd.${PGROUP} prima di aggiungere questa riga creo un file banner per ciascun utente nella directory / etc. e file come motd.root e motd.alex e questo lavoro per me.