SSH notions

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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