L'accès à distance
Dans mon blog précédent, on s'est rappelé combien la ligne de commande était un outil pratique et que cela permettait d'automatiser des opérations. L'informatique c'est l'automatisation par nature. La ligne de commande permet donc d'enchaîner mes taches. C'est une abstraction en cela que votre ligne de commande peut être exécutée à distance. Historiquement via telnet, mais le flux réseau en telnet n'est pas chiffrer, on préfère donc utiliser SSH (Secure Shell).
SSH
Clés publiques
Pour que l'échange soit privé, il y a un mécanisme de chiffrement asymétrique, avec un CLe priver et une clé publique. Lorsque vous vous connectez à un serveur ayant un service SSH, vous faites un échange de clés. La clé du serveur sera associée à son IP dans ~/.ssh/known_hosts.
1 2 3 4 5 | |
Par défaut, un serveur ssh autorise l'authentification par mot de passe. C'est pratique, mais finalement pas tellement sécurisé. Pizza73 et 01022008 sont des mots de passe faciles à bruteforcer. Il est donc préférable de préférer une authentification par clés.
configuration OpenSSH
Pour mieux sécuriser son serveur, on va :
- interdire l'utilisateur root
- interdire l'authentification par mots de passe
- définir l'emplacement des clés autorisé
- ajoute la clés de l'utilisateur jvaljean (on verra comment la créer plus loin)
NB : Cette commande est proposée en root, mais elle passe avec sudo.
ATTENTION après cela on ne peut plus ce connecter avec l'utilisateur root
1 2 3 4 5 6 7 8 | |
Maintenant, l'utilisateur root ne peux plus ce connecter, l'utilisateur jvaljean peut se connecter uniquement avec sa clé publique “ssh-rsa X2x…”
création de la clé
Pour créer sa cles il faut choisir :
- sa taille : 4 096 (d'après l'ANSII donne une durée de vie acceptable ici : http://www.ssi.gouv.fr/uploads/2015/01/RGS_v-2-0_B1.pdf)
- l'algorithme : RSA (par défaut)
- l'emplacement de la clé (Et oui, on peut et devrais avoir plusieurs clés, on y reviendra plus loin, sinon c'est id_rsa)
- un mot de passe pour utiliser la clé (évitons pizza82)
1
| |
ou
1
| |
Après on peut se connecter au serveur ayant notre clé avec la commande ssh Rappel :
1
| |
ou
1
| |
le port-mapping
Une fonction très pratique de SSH est le port mapping il est possible de mapper un port de votre client local à celui du serveur distant. Cela permet de vous connecter à distance sur vos serveurs comme si vous étiez dans votre réseau. on peut par exemple mapper le port 8080 d'un Tomcat sur son 8888 local comme ceci
1
| |
on pourra par la suite accéder depuis son client web local sur http://127.0.0.1:8888 comme si nous étions sur le réseau local de la machine
~/.ssh/config
Nous l'avons vu précédemment, la clé d'authenfication est précieuse, mais il est parfois nécessaire de la copier sur d'autre machine, elle peut être corrompu ou obsolète. Enfin, certains groupes de serveur peuvent nécessiter des sécurités différentes. Pour cela, il est conseillé d'avoir plusieurs cles. Pour éviter de taper des commandes trop longues, il est possible de définir les commandes “par défaut, par host dans ”~/.ssh/config" sous la forme :
- Host : les serveurs utilisant cette configuration (liste séparée d'un espace)
Hostname : le nom du serveur qui appelle celui annoncé par le client User : le nom de l'utilisateur à utiliser IdentityFile ~/.ssh/id_github_mb35_rsa
1 2 3 4 5 | |
Conclusion
SSH est l'outil de base du sysadmin et du très tendance DevOps. IMHO (à mon humble avis) “~/.ssh/config” n'est pas suffissement connu.