De quelles manières un message peut-il être affiché dans un shell bash après la connexion d'un utilisateur?

13

J'ai un CentOS 5.7 VPS utilisant bash comme shell qui affiche un message d'accueil de marque immédiatement après la connexion via SSH. J'ai essayé de le modifier, mais je n'arrive pas à trouver où il se trouve aux endroits habituels. Jusqu'à présent, j'ai regardé dans le motdfichier et vérifié sshd_configles paramètres du fichier de bannière. Un fichier de bannière n'est pas défini.

Où puis-je chercher où se trouve le message de connexion?

Wesley
la source
1
Vous pouvez essayer un récursive grepdans /etcpour un sous - ensemble du message.
Kevin
@ Kevin Attendez, me suivez-vous sur Twitter? Je pensais juste que j'utilisais grep -r pour trouver quelque chose. Sauf que je suis un doofus et j'ai décidé de commencer à / =)
Wesley
J'ai commencé /aussi, prend une éternité sur un disque de 1 To, laissez-moi vous dire ... Mais je n'ai jamais été sur Twitter :)
Kevin
@WesleyDavid pouvez-vous publier une capture d'écran?
Karlson

Réponses:

21

Les systèmes Unix traditionnels s'affichent /etc/motdaprès que l'utilisateur a été authentifié avec succès et avant que le shell de l'utilisateur soit appelé. Sur les systèmes modernes, cela se fait par le pam_motdmodule PAM, qui peut être configuré dans /etc/pam.confou /etc/pam.d/*pour afficher un fichier différent.

Le serveur ssh lui-même peut être configuré pour imprimer /etc/motdsi l' PrintMotdoption n'est pas désactivée dans /etc/sshd_config. Il peut également imprimer l'heure de la connexion précédente s'il PrintLastLogn'est pas désactivé.

Un autre message traditionnel pourrait vous dire si cela You have new mailou You have mail. Sur les systèmes avec PAM, cela se fait par le pam_mailmodule. Certains shells peuvent imprimer un message sur le courrier disponible.

Une fois le shell de l'utilisateur lancé, les fichiers de démarrage de l'utilisateur peuvent imprimer des messages supplémentaires. Pour une connexion shell interactif, si la connexion de l'utilisateur est un shell de type Bourne, regardez dans /etc/profile, ~/.profile, plus ~/.bash_profileet ~/.bash_loginpour bash. Pour une connexion interactive à zsh, consultez /etc/zprofile, /etc/zlogin, /etc/zshrc, ~/.zprofile, ~/.zloginet ~/.zshrc. Pour une connexion interactive à csh, recherchez dans /etc/csh.loginet ~/.login.

Si le shell de connexion de l'utilisateur est bash et qu'il s'agit d'une connexion non interactive, bash s'exécute ~/.bashrc(ce qui est vraiment étrange, car il ~/.bashrcn'est exécuté pour les shells interactifs que si le shell n'est pas un shell de connexion). Cela peut être une source de problèmes; Je recommande d'inclure l'extrait de code suivant en haut de ~/.bashrcpour renflouer si le shell n'est pas interactif:

if [[ $- != *i* ]]; then return; fi
Gilles 'SO- arrête d'être méchant'
la source
C'était une série d'échos dans mon .bash_profile. > _ <Cette question est étrangère à l'original, mais: l'écho des choses dans .bash_profile ne semble-t-il pas une mauvaise façon d'envoyer un message? C'est peut-être mieux si vous ne souhaitez envoyer des messages qu'à un seul utilisateur. Il s'agit, après tout, du compte root. Là encore, je suis un noob donc je ne suis pas en mesure de juger les choses de manière trop critique.
Wesley
@WesleyDavid Faire écho à quelque chose .bash_profilene vous envoie qu'un message. Certaines personnes aiment voir des messages utiles ou drôles lorsqu'elles se connectent. Je ne peux pas parler pour le compte root de votre système car je ne connais ni le contenu du message, ni les personnes et les paramètres impliqués.
Gilles 'SO- arrête d'être méchant'
Mettre un message dans / etc / motd a fonctionné sur Mac OS X, c'est tout ce dont j'avais besoin. Merci pour ça.
dgig
8

Il y a un peu:

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

aditionellement

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

Vous devrez peut-être également parcourir tous les programmes appelés à partir de ces scripts, car quelque chose comme fortunepourrait stocker les quips dans lesquels il s'affiche /usr/share. Pour l'isoler, vous pouvez faire:

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

Sur Ubuntu, il existe également un fichier:

/etc/motd.tail
Karlson
la source
1
/etc/issueest traditionnellement affiché avant qu'un utilisateur se connecte, pas après.
Chris Down
Merci! Je ne savais pas profileet profile.d. Hélas, vos quatre suggestions n'ont abouti à rien. Je me demande si quelque chose de personnalisé est compilé dans le binaire bash ...?
Wesley
@ChrisDown Oui, mais je ne connais aucun système qui mettrait quoi que ce soit à l'écran après l'affichage de l'invite.
Karlson
@WesleyDavid J'ai modifié la réponse.
Karlson
Merci beaucoup pour toutes les informations! Cela m'a beaucoup appris sur la façon dont les shells peuvent envoyer des informations aux sessions TTY. =)
Wesley
3

Les nouveaux systèmes stockent les composants MOTD /etc/update-motd.dafin que différentes macros puissent être exécutées pour personnaliser le motd afin que les informations de mise à jour, les alertes système, etc. s'affichent à la connexion.

Ajoutez votre personnalisation dans un autre fichier avec la priorité de 00à99

99-footerse charge généralement /etc/motd.tailsi le clouer à la fin est suffisant et que vous ne souhaitez utiliser aucun des éléments de macro.

Fiasco Labs
la source
1

Vous pouvez regarder dedans /etc/shell, c'est là que j'ai trouvé un message que j'essayais de changer. Cela ne fonctionne pas de commenter avec un "#", il vous suffit de supprimer tout texte et d'ajouter le vôtre. Des espaces et de nouvelles lignes apparaissent également lorsque vous les placez dans le fichier.

Miguel Herrera
la source