~~SLIDESHOW~~ ====== SE - SSH - Présentation ====== **SSH** (Secure Shell - 1995) est un protocole réseau utilisé pour remplacer les anciens protocoles et outils notoirement peu sécurisés comme TELNET, RSH, RCP, RLOGIN. ===== SSH - Fonctionnalités ===== Il chiffre le trafic au moyen de la cryptographie asymétrique (**RSA**, **ECDSA** ou autre) et rend inopérante la capture de trames et de mots de passe. Il autorise également : * la compression de données. * l'authentification par **clé publique** (optionnelle) * l'**authentification de serveur** pour limiter les attaques « Man in The Middle » * la **redirection** de ports TCP : une session TCP peut être redirigée sur un tunnel SSH * la **redirection** de session X11 (Xwindow). * le **transfert** de fichiers ===== Lee fichiers de configuration ===== * pour le serveur : **/etc/ssh/sshd_config** * pour le client : **/etc/ssh/ssh_config** Pour les clients, chaque utilisateur dispose d’un répertoire **.ssh** dans son répertoire home comportant le fichier **known_host** (clés RSA des machines auxquelles on s’est connecté) ainsi que les éventuels fichiers de clé publique et privée de même qu'un fichier de configuration (config). Il peut aussi disposer d'un fichier **authorized_keys** contenant les clé publiques des machines autorisées. ===== Exemple de fichier /etc/ssh/config ===== host gwe hostname gwe.lyc-lecastel.fr port 5678 user root host web-dx hostname 82.225.155.241 user root host px hostname px.lyc-lecastel.lan user root ===== Connexion par clé publique ===== Elle permet de se connecter à un serveur distant sans devoir fournir de mot de passe et assure ainsi une sécurité bien supérieure. Elle présente également l’intérêt de pouvoir **automatiser** des connexions (scripts de sauvegarde, ...) Il est néanmoins possible de protéger la clé privée par une **passphrase** pour éviter un usage imprévu de la clé ===== 1 - Génération d'une paire de clés ===== **ssh-keygen** sio@buster:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/sio/.ssh/id_rsa): Created directory '/home/sio/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/sio/.ssh/id_rsa. Your public key has been saved in /home/sio/.ssh/id_rsa.pub. The key fingerprint is: SHA256:CRJDM/6p4MHYF/VUEoSB16ULfkgedKwVbosjjp0V+YI sio@buster The key's randomart image is: +---[RSA 2048]----+ | .*.+*B=o | | ..Bo*+o | | +.Bo= | | + O.@ + | |. = E @ S | | . B = + | | o = | | | | | +----[SHA256]-----+ ===== 2 - Copie de la clé publique sur le serveur distant ===== **ssh-copy-id user@machine** sio@buster:~$ ssh-copy-id srv /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/sio/.ssh/id_rsa.pub" The authenticity of host 'srv' cannot be established. ECDSA key fingerprint is SHA256:gGL8vNTSj1RJ17LQ05wkZvuawTRkKzkKdVNzEoow59k. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys sio@srv's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'srv'" and check to make sure that only the key(s) you wanted were added. ===== Execution de commande distante ===== * **SSH** permet l'exécution de commandes distantes ssh sio@srv uptime 01:36:03 up 74 days, 3:18, 2 users, load average: 0,00, 0,00, 0,00 ssh root@srv "ls -lh" ===== SSH - sécurisation ===== **SSH** est un service très sensible au niveau sécurité * interdiction de login root : **PermitRootLogin No** dans **/etc/ssh/sshd_confi**g * changement de port pour un serveur public : Port XXX au lieu de 22 * il est également possible de forcer l'utilisation de clé et d'interdire l'authentification par mot de passe. * Il est très judicieux d’installer le paquet **fail2ban** qui permet de bloquer pendant un certain temps (au moyen de règles **iptables**) les hôtes indélicats à l’origine de nombreuses tentatives de connexions infructueuses. Il est pratiquement indispensable sur un serveur public. * On pourra également examiner **/var/log/auth.log** (sur Debian) pour examiner les tentatives de connexion