SSH MOTD por usuario

17

Quiero mostrar un banner (mensaje de bienvenida) para los usuarios de SSH con un mensaje de bienvenida específico para cada usuario.

user260277
fuente

Respuestas:

38

No especificó qué servidor SSH está utilizando. Estoy asumiendo OpenSSH.

Tenga en cuenta que el banner SSH y el MOTD son dos cosas diferentes.

Aunque casi no se pueden distinguir en un terminal SSH, tienen un comportamiento diferente, por ejemplo, en un cliente SFTP.


El MOTD es solo un texto impreso en un terminal interactivo. Por lo tanto, no (y no puede) enviarse a clientes SFTP, por ejemplo (más sobre eso más adelante).

El MOTD está codificado /etc/motden OpenSSH. Puede activar / desactivar globalmente solo, utilizando la PrintMotddirectiva.

Sin embargo, en algunos sistemas Linux, PrintMotdsiempre está apagado y la pila PAM imprime el MOTD (usando el pam_motdmódulo). En este caso, puede desactivarlo mediante /etc/pam.d/sshdo especificar una motd=ruta personalizada como parámetro de módulo.


El banner SSH es una característica especial de SSH 2.0, enviada en un paquete SSH específico (SSH2_MSG_USERAUTH_BANNER).

Como tal, incluso los clientes no terminales, como los clientes SFTP, pueden procesarlo y mostrarlo al usuario. Vea cómo se muestra el banner en el cliente WinSCP SFTP / SCP, por ejemplo.

El banner SSH es configurable por usuario (o grupo u otro criterio) al sshd_configusar Bannerlas Matchdirectivas y :

Match User username1
    Banner /etc/banner_user1

Match User username2
    Banner /etc/banner_user2

Consulte también Desactivar banner ssh para usuarios específicos o ips .


Por supuesto, también puede usar una implementación personalizada para el mensaje / banner. Simplemente imprima un mensaje seleccionado usando su lógica personalizada desde un script de perfil global.

Al igual que con el MOTD, esto no funcionará para sesiones no interactivas (SFTP y similares).

Más importante aún, no solo no funcionará, sino que debe asegurarse de imprimir el mensaje solo para un terminal interactivo. Lo que OpenSSH hace automáticamente para el /etc/motd. Utilice una secuencia de comandos de perfil global que se ejecute solo para un terminal interactivo o imprima el mensaje condicionalmente en función del valor de la TERMvariable de entorno.

Si imprime el mensaje para una sesión no interactiva, interrumpe cualquier cliente que use un protocolo estricto, como el SFTP o el SCP, ya que el cliente intentará interpretar su mensaje de texto como un mensaje de protocolo, fallando gravemente.

Consulte, por ejemplo, la descripción de dicho problema en la documentación del cliente WinSCP SFTP / SCP .

(Soy el autor de WinSCP)

Martin Prikryl
fuente
Hola a todos, gracias por responder, tengo la solución, corríjame si me equivoco. Añado estas líneas en el archivo / etc / profile. PGROUP = groups|awk '{print $1}'cat /etc/motd.${PGROUP} antes de agregar esta línea, creo un archivo de banner para cada usuario en el directorio / etc. y archivar como motd.root y motd.alex y esto funciona para mí.
user260277
Eso también debería hacerlo. Excepto según mi respuesta, esto funciona solo en un terminal interactivo. No funcionará para SFTP y similares.
Martin Prikryl
terminal interactivo significa?
user260277
Es un terminal con el que un humano interactúa (a diferencia de la sesión SFTP, la sesión SCP o el terminal no interactivo utilizado para la ejecución remota de alguna tarea por lotes)
Martin Prikryl
He incluido algunos detalles complicados sobre la implementación personalizada del banner.
Martin Prikryl
9

También puede usar el "$HOME/.ssh/rc"archivo para archivar lo que desea hacer

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

Por lo tanto, puede tener un ssh rc para cada usuario.

c4f4t0r
fuente
Hola, lo intento pero me da el mensaje de error .ssh / rc: 1: .ssh / rc: welcom: no encontrado.
user260277
fue mi culpa, hice un error tipográfico, necesitas eco como en el script bash normal
c4f4t0r
"Wolrd" también es un error tipográfico :)
Simon
Me sale "stty: entrada estándar: ioctl inapropiado para el dispositivo".
Pausado hasta nuevo aviso.
¿Qué tienes en .ssh / rc?
c4f4t0r