Comment modifier le message de «dernière connexion» SSH?

16

Je voudrais modifier les Last login:informations qui sont imprimées avec le message du jour, mais je ne trouve pas le script qui génère et résonne.

Où est-il défini, dans un script shell facile à modifier, ou fermé dans un binaire?


Remarque, ceci est différent de ServerFault: Comment puis-je modifier le message de bienvenue au démarrage de ssh? . Les informations de "dernière connexion" ne sont pas imprimées de l'intérieur /etc/update-motd.d/, mais sont plutôt définies en positionnant le PrintLastLogdrapeau, et ne peuvent donc pas être modifiées comme les autres parties du message du jour.

IQAndreas
la source
Ces informations sont enregistrées dans utmpet wtmpfichiers ( en fonction de la distribution, l' enregistrement /var/run/utmpou /var/log/utmpou consultez le /varrépertoire). Ces fichiers ne sont pas enregistrés sous forme de texte, mais au format binaire, vous aurez donc besoin d'outils spéciaux pour les modifier. Le fichier utmp garde une trace de l'état de connexion actuel de chaque utilisateur. Le fichier wtmp enregistre toutes les connexions et l'historique des déconnexions. Vous aurez besoin d'outils spéciaux pour les modifier, mais je n'ai rien trouvé vraiment.
phoops

Réponses:

14

On dirait que le format de la ligne imprimée est compilé en sshd:

[me@risby ~]$ ssh lory
Last login: Fri May 23 10:59:01 2014 from 2a01:2c0:e:300:7271:bcff:feac:445a
[me@lory ~]$ strings /usr/sbin/sshd | grep -i "last login"
Last login: %s
Last login: %s from %s

Je ne vois aucune option de configuration pour changer cela non plus, vous devrez donc modifier la source et recompiler.

Edit : Dans le cas limite, vous pouvez trouver la source sur http://www.openssh.org . Mais vous ne nous dites pas que vous utilisez OpenSSH ou quoi que ce soit à propos de votre plate-forme, il est donc difficile d'être plus précis. S'il s'agit d'un système Linux, vous feriez beaucoup mieux pour obtenir la source appropriée à votre distribution de la manière habituelle, et recompilez via vos mécanismes spécifiques à la distribution.

Mais vraiment, vous ne devriez pas faire cela du tout, sauf si vous avez une raison commerciale extrêmement convaincante de le faire: vous vous faites un cauchemar de maintenance , en allant vers une version compilée à la main d'un package sensible à la sécurité.

Chapelier Fou
la source
Où peut- sshdon trouver le code source derrière ?
IQAndreas
1
En fait, je prévoyais autre chose avec la source. Je voulais voir comment ils analysent les données wtmp, définissent l' PrintLastLogindicateur noet recréent l'avis de "dernière connexion" avec mon propre script placé update-motd.d. Beaucoup plus facile à entretenir. :)
IQAndreas
1
Je constate fréquemment que la motdsortie n'est pas complètement à jour. Je pense donc update-motdne pas être exécuté à chaque connexion.
kasperd
@kasperd Il se met à jour toutes les 10 minutes en tant que tâche cron. C'est pour aider au cas où il essaie de faire quelque chose de "lent" comme récupérer une chaîne sur Internet, donc cela ne ralentit pas le serveur chaque fois que quelqu'un se connecte.
IQAndreas
3
Le message "dernière connexion" est spécifique à l'utilisateur, tandis que le motd est à l' échelle du système. Je ne sais pas comment vous souhaitez recréer le message. De plus, il y a des gens qui lisent réellement ce message et qui souhaitent qu'il soit aussi précis que possible.
Simon Richter
5

Les dernières informations de connexion sont stockées dans /var/log/wtmpou /var/log/utmpce sont des fichiers binaires. Sans regarder le code source de sshd, je ne peux pas être entièrement sûr, mais je m'attendrais à ce qu'il récupère les informations de ces fichiers à l'aide d'appels système appropriés

Il semble peu probable que vous trouviez un moyen de modifier facilement ces informations car elles font partie de la sécurité des utilisateurs.


Si vous voulez vraiment les détails sanglants, vous devez regarder le code source de la fonction login_get_lastlogqui se trouve dansloginrec.c

user9517
la source
@lain +1 à cause de la suggestion du code source - bien que je ne pense pas que ce soit une solution sanglante, tout ce dont il a besoin est un miroir git local. À mon humble avis, utiliser la source n'est pas du diable, même pour les sysadms.
peterh
2

Une autre solution serait d'effacer l'écran au début du fichier motd comme ceci:

^[[H^[[2J
whatever was originally in the motd file here

Remarque: remplacez ^[par le symbole d'échappement (que vous pouvez créer dans l'éditeur nano en appuyant sur les touches suivantes: esc+ v+ esc)

user514464
la source
-2

Peut-être que certains contournent le cas où vous souhaitez simplement modifier la dernière IP de connexion?

Par exemple, vous pouvez changer l'adresse IP affichée en "localhost" en vous reconnectant à ssh à partir d'une machine télécommandée!

Connexion à distance via ssh >> ssh username @ localhost

Maintenant, la dernière adresse IP enregistrée sera localhost

caféine
la source