====== Communications sécurisées avec OpenSSH ====== Atelier Quand: Samedi 4 mai 2019, 13h-17h Lieu: Centre de loisirs Saint-Louis-de-France Animé par: Sébastien Boisvert Matériel requis pour participer aux exercices pratiques: ordinateur personnel avec Linux Commande à taper sur le client (votre ordinateur portable): * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''commande dans l'invite de commande'' (client) Commande à taper sur le serveur (rivendell.linuq.org) * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''commande dans l'invite de commande'' (serveur) {{https://www.openssh.com/images/openssh.gif| Logo de OpenSSH}} * Serveur pour l'atelier: * rivendell.linuq.org (instance du modèle [[https://www.ovh.com/ca/fr/cloud-public/instances/tarifs/ | B2-7]] chez OVH) * Chacun et chacune va avoir un identifiant et un mot de passe ===== Rappels ===== * 3 parties d'un système d'exploitation: kernel (noyau), shell (invite de commande), utilities (applications) * Vidéo de 00:02:19: [[https://www.youtube.com/watch?v=JoVQTPbD6UY | Ken Thompson and Dennis Ritchie Explain UNIX (Bell Labs) ]] * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''uname -a'' (client) * Réseau Internet * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''hostname'' (client) * Protocole TCP/IP (Transmission Control Protocol/Internet Protocol) * Adresse IP (IPv4: a.b.c.d) * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''ip addr ls'' (client) * Port TCP/IP (port 22 pour SSH, 80 pour HTTP, 443 pour HTTPS) * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} * ''telnet linuq.org 80'' (client) * ''telnet rivendell.linuq.org 22'' (client) ===== Le projet OpenSSH ===== * Communications sécurisées * Site web officiel de OpenSSH: [[https://www.openssh.com/ | https://www.openssh.com/ ]] * OpenSSH est écrit en C pour OpenBSD * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''ssh -V'' (client) * Pour les autres plateformes (Linux, Mac, Windows, FreeBSD, ...), c'est plutôt OpenSSH "portable" * Dans Ubuntu: paquet opensh-client, version 1:7.6p1-4ubuntu0.3 * Signifie: version 7.6 p1 de OpenSSH, soit la version portable 1 (p1) de OpenSSH 7.6 * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''dpkg -l|grep openssh'' (client) * Code source: [[https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/ | Dépôt CVS de OpenSSH]] * pas de dépôt git ou subversion ou mercurial * Surprenant car CVS ne garantie pas l'intégrité des fichiers comme GIT le fait. ===== Protocole SSH vs OpenSSH ===== * Protocole SSH utilise port TCP/IP 22 (comme HTTP utilise le port TCP/IP 80) * Protocole SSH 2 versus Protocole SSH 1 * OpenSSH: [[https://www.openssh.com/users.html | implémentation très utilisée du protocole SSH]] * [[https://fr.wikipedia.org/wiki/Secure_Shell | Protocole SSH]] * [[https://www.openssh.com/specs.html | Spécifications RFC sur www.openssh.com]] * [[https://www.ssh.com/ssh/protocol/ | ssh protocol, sur www.ssh.com (anglais)]] * Autres protocoles: * [[https://fr.wikipedia.org/wiki/SSH_File_Transfer_Protocol | Protocole SFTP]] * [[https://fr.wikipedia.org/wiki/Secure_copy | Protocole SCP]] * Commande pour tester le protocole SSH: * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''telnet rivendell.linuq.org 22'' (client) ===== Serveurs / démons ===== * sshd - serveur OpenSSH avec le protocole SSH 2 * répond aux clients "ssh" * paquet openssh-server dans Ubuntu * ssh-keyscan - Scanneur pour obtenir la liste des clés et empruntes d'un serveur sshd qui roule sur un serveur * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''ssh-keyscan rivendell.linuq.org'' (client) * sftp-server - serveur SFTP * répond aux clients "sftp" * paquet openssh-sftp-server dans Ubuntu ===== Programme client ===== * ssh - client SSH de OpenSSH * Peut être utiliser pour obtenir une invite de commande sur un serveur * paquet openssh-client dans Ubuntu * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''ssh -l utilisateur rivendell.linuq.org -p 22'' (client) * Commandes pour voir qui sont connectés: * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} * ''who'' (serveur) * ''w'' (serveur) ===== Transfert de fichiers ===== * scp - programme client pour le protocole SCP * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} * ''scp STE402P_.pdf utilisateur@rivendell.linuq.org:/tmp/'' (client, téléverser fichier, client -> serveur) * ''scp utilisateur@rivendell.linuq.org:/tmp/STE402P_.pdf .'' (client, télécharger fichier, serveur -> client) * sftp - programme client pour le protocole SFTP * rsync est supérieur à scp et à sftp pour transférer / synchroniser des fichiers * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} * ''echo Bonjour > mon-fichier.txt'' (client) * ''rsync -av mon-fichier.txt utilisateur@rivendell.linuq.org:'' (client) ===== Gestion de clés d'authentification ===== * ssh-keygen - générer des clés d'authentification * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''ssh-keygen -f key.pem'' (client) * ssh-copy-id (script SH) - copier une clé publique d'authentification sur un serveur * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''ssh-copy-id -i key.pem.pub utilisateur@rivendell.linuq.org -p 22'' (client) * Maintenant possible de s'authentifier avec la clé * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''ssh -i key.pem -l utilisateur rivendell.linuq.org -p 22'' (client) ===== Agent d'authentification ===== * ssh-agent - un agent qui gère vos clés d'authentification pour vous * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} * ''ssh-agent > ssh-agent.txt'' (client) * ''source ssh-agent.txt'' (client) * ssh-add - programme client pour ajouter une clé à l'agent 'ssh-agent' * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} * ''ssh-add key.pem'' (client) * ''ssh-add -l'' (client) * Maintenant possible de s'authentifier avec l'agent: * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''ssh -l utilisateur rivendell.linuq.org -p 22'' (client) ===== Redirection de port (avancé) ===== * Créer la redirection de port: * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''ssh -l utilisateur rivendell.linuq.org -p 22 -N -f -L 2222:serveur-secret:22'' (client) * Se connecter avec ssh sur le //serveur-secret// qui est protégé par un pare-feu: * {{https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Gnome-utilities-terminal.svg/48px-Gnome-utilities-terminal.svg.png | Commande}} ''ssh -p 2222 localhost'' (client) * ===== Programmes mystérieux de OpenSSH (si on a le temps !) ===== * Je n'ai jamais utilisé ces programmes. * slogin - lien symbolique vers "ssh" * ssh-keysign - programme pour signer des clés * désactivé par défaut * n'est pas distribué dans Ubuntu 18.04.1 LTS * ssh-argv0 (script SH) - programme qui fait une commande qui ressemble à "exec ssh" * ssh-import-id (script Python) - Obtenir une clé publique d'authentification * ssh-import-id-gh (script Python) - Obtenir une clé publique d'authentification * pour Github.com (Microsoft) * ssh-import-id-lp (script Python) - Obtenir une clé publique d'authentification * pour Launchpad.net (Canonical, compagnie derrière Ubuntu) ===== Liens ===== * [[https://yunohost.org/#/ssh_fr | Qu’est-ce que SSH ?]] * [[https://www.it-connect.fr/cours/comprendre-et-maitriser-ssh/ | Comprendre et maîtriser SSH]] * [[https://www.takouine.com/course/comprendre-et-maitriser-ssh/ | Comprendre et maîtriser SSH]] * [[https://alexandre.alapetite.fr/doc-alex/ssh-tunnel-http/index.fr.html | Tunnel SSH pour HTTP(S)]] * Cryptographie asymmétrique, voir: [[logiciels:GnuPG|Présentation de GnuPG (chiffrement, cryptographie)]]