SSH notions
| Fiche express | |
|---|---|
| Domaine | Accès distant chiffré |
| Démon | sshd
|
| Config serveur | /etc/ssh/sshd_config
|
| Config client | /etc/ssh/ssh_config
|
| Port | 22 |
| Voir aussi | Creer une clef ssh · SSH securiser · SSH tunnelling |
SSH (Secure SHell) est un protocole de connexion sécurisée (chiffrée) entre un client et un serveur. Il sert à se connecter à une machine distante (comme telnet, mais chiffré), à transférer des fichiers (scp, sftp) ou à créer des tunnels pour sécuriser des protocoles qui ne le sont pas nativement.
Le système de clés
Cryptographie asymétrique
SSH s'appuie sur la cryptographie asymétrique (RSA ou DSA). Chaque personne dispose d'un couple de clés : une clé publique, librement diffusable, et une clé privée, gardée secrète. La connaissance de la clé publique ne permet pas de déduire la clé privée. Un message chiffré avec la clé publique de B ne peut être déchiffré que par la clé privée de B.
Cryptographie symétrique
SSH utilise aussi la cryptographie symétrique : A et B partagent une même clé secrète servant à chiffrer et déchiffrer. Elle est beaucoup moins coûteuse en ressources que l'asymétrique, mais pose le problème de l'échange initial de la clé. Comme dans SSL, l'asymétrique sert en début de communication à échanger de façon sûre une clé secrète, puis la suite est chiffrée symétriquement avec cette clé.
Configuration du serveur
Le démon se pilote via /etc/init.d/ssh (ou systemctl). Le fichier de
configuration du serveur est /etc/ssh/sshd_config — à ne pas confondre avec
/etc/ssh/ssh_config (configuration du client). Quelques options notables :
Port 22 # port d'écoute
Protocol 2 # n'accepter que SSHv2 (plus sûr que la v1)
PermitRootLogin no # interdire la connexion directe en root
X11Forwarding yes # transfert de l'affichage graphique
LoginGraceTime 600 # délai de connexion maximum
AuthorizedKeysFile .ssh/authorized_keys
PermitEmptyPasswords no # refuser les mots de passe vides
Après modification, recharger la configuration : /etc/init.d/ssh restart.
Se connecter
ssh -l <login> <serveur>
ssh <login>@<serveur>
Authentification par mot de passe
Méthode la plus simple : le mot de passe est demandé à la connexion et chiffré par SSH, il ne circule donc pas en clair sur le réseau.
Authentification par clé
L'utilisateur s'authentifie par son couple de clés (comme le serveur le fait auprès du client). La clé publique est déposée sur le serveur, la clé privée reste sur le poste client ; aucun mot de passe ne circule alors sur le réseau.
ssh-keygen -t dsa # génère ~/.ssh/id_dsa (privée) et id_dsa.pub (publique)
ssh-keygen -p # changer la passphrase protégeant la clé privée
La clé privée est enregistrée en 600, la publique en 644. Une
passphrase peut chiffrer la clé privée (protection supplémentaire, demandée à chaque
usage). Voir Creer une clef ssh pour les variantes de génération.
Autoriser sa clé publique
Placer la partie publique dans le fichier ~/.ssh/authorized_keys du compte visé,
sur le serveur. Chaque ligne correspond à une clé autorisée (une clé = une seule ligne). Le
répertoire ~/.ssh ne doit pas être lisible par tous (700), ni le
fichier authorized_keys (600), sinon SSH refuse de les utiliser.
ssh -i <fichier_cle_privee> <login>@<serveur> # clé stockée hors de l'emplacement par défaut
Agent SSH
L'agent SSH garde en mémoire des clés privées déchiffrées : la passphrase n'est demandée qu'une fois, au moment de l'ajout de la clé, et l'agent peut faire suivre la clé sur plusieurs connexions (agent forwarding).
ssh-agent /bin/bash # lance un shell dans lequel l'agent est actif
ssh-add [<fichier>] # ajoute une clé (par défaut ~/.ssh/id_dsa)
Voir aussi
- Creer une clef ssh — génération de clés (RSA, DSA, ECDSA, ed25519)
- SSH securiser — durcissement du serveur SSH
- SSH tunnelling — redirections de ports et tunnels chiffrés
- SSH sans root — interdire la connexion directe en root
- SSH (AIX) — spécificités SSH sous AIX