Multiplexage des connexions SSH

Magazine
Marque
GNU/Linux Magazine
Numéro
115
Mois de parution
avril 2009


Résumé
SSH est un protocole incontournable, à la fois parce que c'est une manière fiable et sécurisée pour accéder à des machines quand on n'a qu'une confiance limitée dans le réseau qui va acheminer nos messages, et aussi parce qu'il peut servir de transport pour d'autres protocoles non sécurisés.

Body

Cet article va aborder une fonctionnalité très utile d’OpenSSH et de la version 2 du protocole pour partager des connexions.

Même si ce n'est pas une nouveauté (la première implémentation est apparue dans OpenSSH version 3.9p1), c'est fichtrement commode, et une petite explication de texte n'est pas totalement superflue.

1. Introduction

Si on parle de sécurité et que l'on parle en même temps de partage de connexion, on peut soulever un sourcil d'incrédulité, et on aura certainement raison. On n'est pas à l'abri d'une utilisation indue des ressources en cas de partage, et il n'y a pas de raison qu'OpenSSH échappe à la règle.

Fort heureusement, il y a aussi la possibilité d'utiliser Netfilter pour empêcher des connexions indésirables, même en local. Et puis, avec SELinux, une politique peut aussi empêcher d'établir des connexions ou se mettre à l'écoute sur un port TCP par exemple.

2. Cas d'utilisation

Imaginez que vous vous connectez sous une certaine identité (toujours la même) sur un serveur.

Imaginez que, pour des besoins particuliers, vous devez ouvrir jusqu'à dix connexions en parallèle sur le même daemon. En réalité, pour chaque connexion établie, un nouveau daemon est démarré (fork) et est à l'écoute de cette nouvelle connexion.

Ce mécanisme est bien pratique et isole effectivement des processus par rapport à d'autres, mais présente quelques inconvénients.

2.1 Authentifications à répétition

Pour chaque nouvelle connexion, vous devrez repasser par la phase d'authentification, même si c'est fait de manière transparente du point de vue de l'utilisateur à l'aide de clefs ou d'un agent d'authentification.

Mais, si l'on regarde de manière détaillée tout ce qui se passe lors d'une connexion, beaucoup de calculs sont effectués pour négocier l'authentification et le secret partagé pour la suite des communications. Tout cela prend du temps, et débouche sur un processus dédié. Même si Linux est performant sur le fork() en raison de l'utilisation du Copy-On-Write entre autres, le temps de lancement d'un sshd n'est pas nul.

sans_multiplexage

Fig. 1 : Connexion SSH sans multiplexage

2.2 Redirections

Si un processus démarre et ouvre une redirection de port TCP, et qu'un autre processus l'utilise, en cas de fermeture de la connexion qui supporte la redirection, la connexion de l'autre processus est coupée.

Dans le cas d'une redirection d'agent d'authentification ou de messages X11, le problème est que si elle n'est pas demandée au moment de la connexion, alors il ne sera plus possible de l'ajouter plus tard, sauf à couper la connexion et à ajouter sur la ligne de commande l'option appropriée (-A pour ForwardAgent=yes, -X pour ForwardX11=yes ou -Y pour ForwardX11Trusted=yes).

3. Multiplexons sans plus tarder

Les options qui nous intéressent tout de suite sont :

- -M précise que la connexion sera maîtresse (ControlMaster)

- -S fournit l'emplacement de la socket de contrôle (ControlPath)

D'un premier terminal, il faut ouvrir la connexion maîtresse.

% ssh B -S ~/.ssh/sockets/%r@%h:%p

L'emplacement de la socket de contrôle est forcé ici à un emplacement visible seulement pour le compte d'utilisateur qui lance la commande. Cet emplacement comporte le nom du compte d'utilisateur de la machine sur le serveur, le nom du serveur et le port TCP utilisé. Ceci évite la réutilisation indue des connexions.

Ensuite, pour les autres commandes, il suffit de spécifier l'emplacement de la socket de contrôle, qui sera réutilisée, dans la limite de 12 fois.

% ssh B -S ~/.ssh/sockets/%r@%h:%p

Bien entendu, si une connexion maîtresse est déjà démarrée et que j'essaie d'en démarrer une seconde, ssh se plaint à juste titre et désactive le multiplexage tout en continuant :

% ssh B -M -S /tmp/test

ControlSocket /tmp/test already exists, disabling multiplexing

Juste en passant, l'utilisation d'une socket de contrôle dans /tmp/ n'est pas une bonne idée. C'est juste pour donner un exemple (pas à suivre) sur une spécification sur la ligne de commandes.

Lors de la déconnexion, un message explicite rappelle que l'on utilise une connexion multiplexée.

Shared connection to B closed.

Le message est différent de ce que l'on aurait lorsque l'on se déconnecte d'une connexion normale ou de la connexion maîtresse.

Connection to B closed.

Il existe des variantes pour l'ouverture de la connexion maîtresse, pour une approche plus interactive (voir la signification de ask pour ControlMaster dans la page de manuel de ssh_config(5)). Et, pour faire simple, il est aussi possible d'utiliser la valeur auto, qui va automatiquement créer la socket de contrôle lors de la première connexion et la supprimer par la suite quand la dernière connexion est fermée.

avec_multiplexage

Fig. 2 : Connexion SSH avec multiplexage

4. Exemple de configuration

Plutôt que de spécifier les arguments sur la ligne de commandes, on peut aussi spécifier :

Host *

 User machin

 StrictHostKeyChecking ask

 NoHostAuthenticationForLocalhost yes

 ControlPath ~/.ssh/sockets/%r@%h:%p

 ControlMaster auto

 Compression no

NoHostAuthenticationForLocalhost yes

5. Avantages du multiplexage de connexions

La connexion est multiplexée, c'est bien. On va pouvoir briller en soirée, mais, concrètement, qu'est-ce que ça peut nous faire ?

Eh bien, la réponse est simple : c'est mieux ! Précisons tout de même que ce n'est pas la panacée, et qu'il peut y avoir des inconvénients.

5.1 Authentification unique

La phase d'authentification est unique, toutes les connexions suivantes sont beaucoup plus rapides, tout simplement parce que l'authentification n'est pas retraitée. Si la partie qui prend le plus de temps est le lancement d'un processus à l'arrivée, comme une application ou un interpréteur de commandes, la différence sera certainement imperceptible.

5.2 Partage des configurations

Si la connexion maîtresse utilise la compression ou des redirections de messages X11, d'agent d'authentification ou de redirections de ports, toutes les connexions partagées héritent de ces paramétrages. C'est normal puisqu'il n'y a qu'une connexion ouverte.

5.3 Reconfiguration d'un ensemble de redirections en une fois

Pour aller plus loin sur le point précédent, le fait d'avoir une connexion partagée permet d'ajouter ou de supprimer par exemple des nouvelles redirections à chaud.

Toutes les connexions qui seraient multiplexées utiliseront alors immédiatement ces nouvelles redirections.

On peut faire ça très simplement à l'aide des séquences d'échappement décrites dans la page de manuel de ssh(1).

Par exemple, si on souhaite ajouter une redirection, et en supposant que le caractère d'échappement pour la connexion maîtresse est le « ~ » (caractère par défaut), on aurait :

% ~C

ssh> -L 2345:re.search.wikia.com:80

Forwarding port.

% netstat -alpetn|grep 2345

tcp   0   0 127.0.0.1:2345 0.0.0.0:* LISTEN   500   27373   6649/ssh

tcp   0   0 ::1:2345        :::*       LISTEN   500   27372   6649/ssh

En réalité, on peut voir cette facilité comme un inconvénient aussi. Au pire, on pourra filtrer l'accès au port sur la boucle locale. Il est aussi possible de spécifier une interface d'écoute différente si on souhaite être plus large.

6. Inconvénients du multiplexage de connexions

6.1 Coupure massive

Évidemment, en cas de coupure de la connexion maîtresse, toutes les connexions sont coupées en une seule fois. Cela a au moins l'avantage d'être rapide. Dans ce cas, screen est votre ami.

6.2 Les restes de la veille

Si la dernière connexion est coupée brutalement (signal KILL par exemple), la socket de contrôle reste sur place et empêche les prochains multiplexages. On doit alors le supprimer manuellement.

6.3 Comportement de programmes tiers

Il y a eu des soucis avec le transport svn+ssh et le multiplexage de connexion. Je dois reconnaître que je n'ai pas suivi ce problème, mais le contournement est de désactiver le multiplexage pour les connexions svn. C'est finalement assez simple avec un fichier de configuration par utilisateur :

- Host svnhost

- User svnuser

- ControlMaster no

6.4 En cas d'oubli

Si l’on a oublié de demander le multiplexage explicite des connexions ou si l'on n'a pas précisé une option de compression ou de redirection des messages X11, il faudra démarrer explicitement une nouvelle connexion sans multiplexage ou fermer la connexion existante.

% ssh B -MM

ControlSocket ... already exists, disabling multiplexing

Last login: Sun Feb 8 15:15:20 2009 from b

En supposant qu'il existe une connexion multiplexée avec cette socket, une connexion non multiplexée sera ouverte.

Conclusion

Le multiplexage est très simple à mettre en œuvre, et même s'il a aussi quelques inconvénients et limites, comme le nombre de connexions multiplexées dans une seule connexion maîtresse, le confort d'utilisation est indéniable.

Du point de vue de la sécurité, le multiplexage n'introduit pas plus de failles qu'une authentification à l'aide d'un agent.

Laissez-vous tenter, l'essayer, c'est l'adopter !

Remerciements

Merci aux Mongueurs de Perl francophones pour la relecture.

Références

- http://www.openssh.org/

- Les pages de manuel de ssh(1) et ssh_config(5).




Article rédigé par

Par le(s) même(s) auteur(s)

La souplesse du RAID logiciel de Linux (suite)

Magazine
Marque
GNU/Linux Magazine
Numéro
116
Mois de parution
mai 2009
Résumé
Le précédent article abordait quelques techniques logicielles pour implémenter des miroirs et des réplications, à l'aide de mdadm ou de LVM.Cet épisode va concerner les performances, la combinaison du RAID et de LVM avec quelques comparatifs, ainsi que des pistes d'optimisation et un peu de prospective sur le futur du device-mapper avec une nouvelle cible : dm-replicator.

Compte-rendu du FOSDEM 2009

Magazine
Marque
GNU/Linux Magazine
Numéro
115
Mois de parution
avril 2009
Résumé
Pour cette édition 2009 du FOSDEM, 5 000 visiteurs étaient attendus.Ce compte-rendu ne rapporte qu'une infime partie de tout ce qui a pu se dire. En effet, au plus fort des rencontres, pas moins de 8 conférences étaient données en parallèle, sur des thèmes toujours aussi variés, allant du système aux environnements graphiques, en passant par la sécurité ou les discussions spécifiques à des distributions ou aux bases de données.

Les derniers articles Premiums

Les derniers articles Premium

La place de l’Intelligence Artificielle dans les entreprises

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

L’intelligence artificielle est en train de redéfinir le paysage professionnel. De l’automatisation des tâches répétitives à la cybersécurité, en passant par l’analyse des données, l’IA s’immisce dans tous les aspects de l’entreprise moderne. Toutefois, cette révolution technologique soulève des questions éthiques et sociétales, notamment sur l’avenir des emplois. Cet article se penche sur l’évolution de l’IA, ses applications variées, et les enjeux qu’elle engendre dans le monde du travail.

Petit guide d’outils open source pour le télétravail

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Ah le Covid ! Si en cette période de nombreux cas resurgissent, ce n’est rien comparé aux vagues que nous avons connues en 2020 et 2021. Ce fléau a contraint une large partie de la population à faire ce que tout le monde connaît sous le nom de télétravail. Nous avons dû changer nos habitudes et avons dû apprendre à utiliser de nombreux outils collaboratifs, de visioconférence, etc., dont tout le monde n’était pas habitué. Dans cet article, nous passons en revue quelques outils open source utiles pour le travail à la maison. En effet, pour les adeptes du costume en haut et du pyjama en bas, la communauté open source s’est démenée pour proposer des alternatives aux outils propriétaires et payants.

Sécurisez vos applications web : comment Symfony vous protège des menaces courantes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les frameworks tels que Symfony ont bouleversé le développement web en apportant une structure solide et des outils performants. Malgré ces qualités, nous pouvons découvrir d’innombrables vulnérabilités. Cet article met le doigt sur les failles de sécurité les plus fréquentes qui affectent même les environnements les plus robustes. De l’injection de requêtes à distance à l’exécution de scripts malveillants, découvrez comment ces failles peuvent mettre en péril vos applications et, surtout, comment vous en prémunir.

Bash des temps modernes

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Les scripts Shell, et Bash spécifiquement, demeurent un standard, de facto, de notre industrie. Ils forment un composant primordial de toute distribution Linux, mais c’est aussi un outil de prédilection pour implémenter de nombreuses tâches d’automatisation, en particulier dans le « Cloud », par eux-mêmes ou conjointement à des solutions telles que Ansible. Pour toutes ces raisons et bien d’autres encore, savoir les concevoir de manière robuste et idempotente est crucial.

Les listes de lecture

9 article(s) - ajoutée le 01/07/2020
Vous désirez apprendre le langage Python, mais ne savez pas trop par où commencer ? Cette liste de lecture vous permettra de faire vos premiers pas en découvrant l'écosystème de Python et en écrivant de petits scripts.
11 article(s) - ajoutée le 01/07/2020
La base de tout programme effectuant une tâche un tant soit peu complexe est un algorithme, une méthode permettant de manipuler des données pour obtenir un résultat attendu. Dans cette liste, vous pourrez découvrir quelques spécimens d'algorithmes.
10 article(s) - ajoutée le 01/07/2020
À quoi bon se targuer de posséder des pétaoctets de données si l'on est incapable d'analyser ces dernières ? Cette liste vous aidera à "faire parler" vos données.
Voir les 65 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous