SSH MOTD par utilisateur

17

Je souhaite afficher une bannière (message de bienvenue) pour les utilisateurs SSH avec un message de bienvenue spécifique pour chaque utilisateur.

user260277
la source

Réponses:

38

Vous n'avez pas précisé quel serveur SSH utilisez-vous. Je suppose OpenSSH.

Notez que la bannière SSH et le MOTD sont deux choses différentes.

Bien qu'il soit presque impossible de les distinguer dans un terminal SSH, ils ont un comportement différent, par exemple, dans un client SFTP.


Le MOTD est juste un texte imprimé sur un terminal interactif. Ainsi, il ne sera pas (et ne peut pas) être envoyé aux clients SFTP, par exemple (plus à ce sujet plus tard).

Le MOTD est codé en dur dans le /etc/motdOpenSSH. Vous pouvez l'activer / le désactiver globalement uniquement, à l'aide de la PrintMotddirective.

Sur certains systèmes Linux, cependant, le PrintMotdest toujours désactivé et le MOTD est imprimé à la place par la pile PAM (à l'aide du pam_motdmodule). Dans ce cas, vous pouvez le désactiver via le /etc/pam.d/sshdou spécifier un motd=chemin personnalisé comme paramètre de module.


La bannière SSH est une fonctionnalité spéciale SSH 2.0, envoyée dans un paquet SSH spécifique (SSH2_MSG_USERAUTH_BANNER).

Ainsi, même les clients non terminaux, comme les clients SFTP, peuvent le traiter et l'afficher à l'utilisateur. Voyez par exemple comment la bannière s'affiche dans le client WinSCP SFTP / SCP .

La bannière SSH est configurable par utilisateur (ou groupe ou autres critères) en sshd_configutilisant Bannerles Matchdirectives et :

Match User username1
    Banner /etc/banner_user1

Match User username2
    Banner /etc/banner_user2

Voir aussi Désactiver la bannière ssh pour des utilisateurs spécifiques ou ips .


Bien sûr, vous pouvez également utiliser une implémentation personnalisée pour le message / bannière. Imprimez simplement un message sélectionné à l'aide de votre logique personnalisée à partir d'un script de profil global.

Comme avec le MOTD, cela ne fonctionnera pas pour les sessions non interactives (SFTP et similaires).

Plus important encore, non seulement cela ne fonctionnera pas, vous devez vous assurer que vous imprimez le message pour un terminal interactif uniquement. Ce que OpenSSH fait automatiquement pour le /etc/motd. Utilisez un script de profil global qui s'exécute pour un terminal interactif uniquement ou imprimez le message de manière conditionnelle en fonction de la valeur de la TERMvariable d'environnement.

Si vous imprimez le message pour une session non interactive, vous cassez tout client qui utilise un protocole strict, comme le SFTP ou le SCP, car le client tentera d'interpréter votre message texte comme un message de protocole, échouant gravement.

Voir par exemple la description d'un tel problème dans la documentation du client WinSCP SFTP / SCP .

(Je suis l'auteur de WinSCP)

Martin Prikryl
la source
Salut à tous merci pour la réponse, j'ai obtenu la solution, veuillez me corriger si je me trompe. J'ajoute ces lignes dans le fichier / etc / profile. PGROUP = groups|awk '{print $1}'cat /etc/motd.${PGROUP} avant d'ajouter cette ligne, je crée un fichier de bannière pour chaque utilisateur dans le répertoire / etc. et fichier comme motd.root et motd.alex et ce travail pour moi.
user260277
Cela devrait faire aussi. Sauf selon ma réponse, cela ne fonctionne que dans un terminal interactif. Cela ne fonctionnera pas pour SFTP et similaires.
Martin Prikryl
terminal interactif signifie?
user260277
C'est un terminal avec lequel un humain interagit (contrairement à une session SFTP, une session SCP ou un terminal non interactif utilisé pour l'exécution à distance d'une tâche par lots)
Martin Prikryl
J'ai inclus quelques détails délicats sur l'implémentation personnalisée de la bannière.
Martin Prikryl
9

Vous pouvez également utiliser un "$HOME/.ssh/rc"fichier pour archiver ce que vous voulez faire

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

Ainsi, vous pouvez avoir un ssh rc pour chaque utilisateur.

c4f4t0r
la source
salut, j'essaye mais cela donne un message d'erreur .ssh / rc: 1: .ssh / rc: welcom: introuvable.
user260277
c'était ma faute, j'ai fait une faute de frappe, vous avez besoin d'un écho comme dans le script bash normal
c4f4t0r
"Wolrd" est aussi une faute de frappe :)
Simon
Je reçois "stty: entrée standard: ioctl inapproprié pour le périphérique".
pause jusqu'à nouvel ordre.
Qu'avez-vous en .ssh / rc?
c4f4t0r