Comment puis-je conserver un enregistrement local horodaté de toutes les commandes distantes que j'utilise dans ssh
(client openssh en ligne de commande démarré bash
)?
Exigences:
Essentiel:
- 100% côté client sans dépendre de la journalisation du serveur
- Configuré ou installé par utilisateur avec des journaux stockés dans le répertoire personnel de l'utilisateur.
- Prise en charge de la distinction entre plusieurs sessions simultanées avec différents utilisateurs et hôtes.
- Non intrusif (pas besoin de l'activer à chaque fois et n'interfère pas de manière significative avec l'utilisation de ssh)
Haute priorité:
- La sortie n'est pas enregistrée ou filtrée autant que possible
- Soit les entrées de mot de passe ne sont pas enregistrées, soit le fichier est crypté
- Indique les commandes réelles utilisées (après la fin de l'onglet / historique, les espaces arrière, CTRL+ C, etc ... ont été traités)
Bon d'avoir:
- Enregistre également les commandes dans les sessions chaînées (commandes entrées lors de sessions
ssh
ou à distancesu <user>
) - Le début et la fin de la session doivent être enregistrés
- Une
bash
solution simple et non root serait la meilleure (peut-être un scriptalias
ou unbash
wrapper pour lassh
commande?)
- Enregistre également les commandes dans les sessions chaînées (commandes entrées lors de sessions
Mon niveau de compétence:
- Je ne suis pas nouveau dans la programmation, mais j'apprends toujours
bash
et la "façon Linux", donc des exemples de code avec de brèves explications seraient les plus appréciés.
Stratégies possibles
- Enregistreur de frappe - Problème: enregistre les mots de passe, n'enregistre pas la fin de l'onglet / historique (voir la réponse de Glenn )
screen
avec défilement défilant une fois par seconde etdiff
entre elles pour trouver de nouvelles lignes de défilement - Problème: comment cela peut-il être implémenté de manière automatisée et utile?ssh "$@" | tee >(some_cleaner_function >> $logfile)
- Problème: ne peut pas gérer les commandes multilignes ou l'historique dans les sessions chaînées, un nettoyage soigneux est nécessaire (voir ma réponse)- Une combinaison de certains des éléments ci-dessus
Un exemple
La session SSH suivante:
user@local:~$ ssh user@remote
Last login: Tue Jun 17 16:34:23 2014 from local
user@remote:~$ cd test
user@remote:~/test$ ls
a b
user@remote:~/test$ exit
Peut entraîner un journal ~/logs/ssh.log
tel que:
2014-06-17 16:34:50 [user@remote - start]
2014-06-17 16:34:51 [user@remote] cd test
2014-06-17 16:34:52 [user@remote] ls
2014-06-17 16:34:53 [user@remote] exit
2014-06-17 16:34:53 [user@remote - end]
Ou, peut-être un journal distinct sera créé pour chaque session avec la ligne de commande utilisée pour démarrer la session en haut du fichier.