¿Cuáles son las diferentes formas en que se puede mostrar un mensaje en un shell bash después de que un usuario inicia sesión?

13

Tengo un CentOS 5.7 VPS que usa bash como shell que muestra un saludo de marca inmediatamente después de iniciar sesión a través de SSH. He estado tratando de modificarlo, pero parece que no puedo encontrar dónde está en los lugares habituales. Hasta ahora he buscado en el motdarchivo y verificado la sshd_configconfiguración del archivo de banner. No se ha establecido un archivo de banner.

¿Dónde más puedo buscar dónde podría estar el mensaje de inicio de sesión?

Wesley
fuente
1
Puede intentar un recursivo grepen /etcalgún subconjunto del mensaje.
Kevin
@ Kevin Espera, ¿me estás siguiendo en Twitter? Solo pensé que estaba usando grep -r para encontrar algo. Excepto que soy un tonto y decidí comenzar en / =)
Wesley
También comencé en /, lleva una eternidad en un disco de 1TB, déjame decirte ... Pero nunca he estado en Twitter :)
Kevin
@WesleyDavid, ¿puedes publicar una captura de pantalla?
Karlson

Respuestas:

21

Los sistemas Unix tradicionales se muestran /etc/motddespués de que el usuario se autentica correctamente y antes de que se invoque el shell del usuario. En los sistemas modernos, esto se hace mediante el pam_motdmódulo PAM, que puede configurarse /etc/pam.confo /etc/pam.d/*mostrar un archivo diferente.

El servidor ssh puede configurarse para imprimir /etc/motdsi la PrintMotdopción no está desactivada /etc/sshd_config. También puede imprimir la hora del inicio de sesión anterior si PrintLastLogno está desactivado.

Otro mensaje tradicional podría decirle si eso You have new mailo You have mail. En sistemas con PAM, esto lo hace el pam_mailmódulo. Algunos shells pueden imprimir un mensaje sobre el correo disponible.

Una vez que se inicia el shell del usuario, los archivos de inicio del usuario pueden imprimir mensajes adicionales. Para un inicio de sesión interactivo, si shell de registro del usuario es una concha de estilo Bourne, busque en /etc/profile, ~/.profile, además ~/.bash_profiley ~/.bash_loginde fiesta. Para un inicio de sesión interactivo para zsh, mirada en /etc/zprofile, /etc/zlogin, /etc/zshrc, ~/.zprofile, ~/.zloginy ~/.zshrc. Para un inicio de sesión interactivo en csh, busque /etc/csh.loginy ~/.login.

Si el shell de inicio de sesión del usuario es bash y este es un inicio de sesión no interactivo, entonces bash se ejecuta ~/.bashrc(lo cual es realmente extraño, ya que ~/.bashrcse ejecuta para shells interactivos solo si el shell no es un shell de inicio de sesión). Esto puede ser una fuente de problemas; Recomiendo incluir el siguiente fragmento en la parte superior ~/.bashrcpara rescatar si el shell no es interactivo:

if [[ $- != *i* ]]; then return; fi
Gilles 'SO- deja de ser malvado'
fuente
Fue una serie de ecos en mi .bash_profile. > _ <Esta pregunta es ajena a la original, pero: ¿no se hace eco de las cosas en .bash_profile como una mala forma de enviar un mensaje? Quizás sea mejor si solo desea enviar mensajes a un solo usuario. Esta es, después de todo, la cuenta raíz. Por otra parte, soy un novato, así que no estoy en condiciones de juzgar las cosas demasiado críticamente.
Wesley
@WesleyDavid Hacer eco de algo .bash_profilesolo te envía un mensaje a ti mismo. A algunas personas les gusta ver mensajes útiles o divertidos cuando inician sesión. No puedo hablar por la cuenta raíz de su sistema ya que no conozco ni el contenido del mensaje ni las personas y la configuración involucradas.
Gilles 'SO- deja de ser malvado'
Poner un mensaje en / etc / motd funcionó en Mac OS X, que es todo lo que necesitaba. Gracias por eso.
dgig
8

Hay algunos:

/etc/motd
/etc/issue
/etc/profile - Could echo the message
/etc/profile.d/* - Would be called from /etc/profile

Adicionalmente

/etc/bash_bashrc
/etc/.bashrc
/etc/bashrc
$HOME/.profile
$HOME/.bashrc

También es posible que tenga que pasar por todos los programas a los que se llama desde esos scripts porque algo como fortunepodría estar almacenando las bromas que muestra /usr/share. Para aislarlo puedes hacer:

. /etc/profile
. /etc/bash.bashrc
. $HOME/.profile
. $HOME/.bashrc

En Ubuntu también hay un archivo:

/etc/motd.tail
Karlson
fuente
1
/etc/issuetradicionalmente se muestra antes de que un usuario inicie sesión, no después.
Chris Down
¡Gracias! No sabía sobre profiley profile.d. Por desgracia, las cuatro sugerencias no aparecieron. Me pregunto si algo personalizado se compila en el binario bash ...?
Wesley
@ChrisDown Correcto, pero no conozco ningún sistema que coloque algo en la pantalla después de que se muestre el mensaje.
Karlson
@WesleyDavid He modificado la respuesta.
Karlson
Muchas gracias por toda la información! Esto me ha dado mucho en la forma de aprender las diversas formas en que los shells pueden enviar información a las sesiones de TTY. =)
Wesley
3

Los sistemas más nuevos almacenan los componentes MOTD /etc/update-motd.dpara que se puedan ejecutar varias macros para personalizar el motd para que se muestre información actualizada, alertas del sistema, etc. al iniciar sesión.

Agregue su personalización como otro archivo con prioridad de 00a99

99-footerpor lo general se carga /etc/motd.tailsi es suficiente pegarlo en el extremo y no desea utilizar ninguno de los elementos macro.

Laboratorios Fiasco
fuente
1

Podrías mirar adentro /etc/shell, ahí es donde encontré un mensaje que estaba tratando de cambiar. No funciona comentar con un "#", solo tiene que eliminar cualquier texto y agregar el suyo. También aparecerán espacios y nuevas líneas a medida que las coloque en el archivo.

Miguel Herrera
fuente