Traduction(s) : Deutsch - English - Français - Italiano

ToDo : fusionner (et traduire) cette page avec la version anglaise

Introduction

SSH1Secure SHell ») est un protocole de communication sécurisé. Il permet, entre autres, de se connecter à un hôte à distance de façon sécurisée sur un réseau qui ne l'est pas forcément. Rendez-vous sur Wikipedia - Secure Shell pour plus d'informations, ainsi que ssh, lsh-client ou dropbear pour découvrir quelques implémentations du protocole SSH présentent dans Debian, avec bien sûr OpenSSH qui est probablement la plus populaire2. SSH remplace et améliore telnet,rlogin et rsh, qui sont tous des protocoles de communication à distance mais n'incluant aucune couche de sécurité.

Dans ce document nous allons utiliser la suite OpenSSH, et il sera également supposé que les deux variables suivantes seront définies :

hôte_distant=<l'ordinateur à distance>
utilisateur_distant=<nom d'utilisateur sur $hôte_distant>

Par conséquent, pour reproduire les commandes ci-dessous, veillez à bien remplacer ces valeurs par celles qui vous intéressent. Notez aussi que « hôte_distant » peut être une adresse IP.

Installation

Installation du client

Normalement, le client est installé par défaut, sinon il suffit de saisir en tant que « root » :

apt-get install openssh-client

Installation du serveur

La partie serveur permet à des hôtes distants de se connecter à votre système et sera installée comme suit en tant que « root » :

apt-get install openssh-server

Fichiers de configuration

Les principaux fichiers de configuration sont dans le répertoire /etc/ssh :

De plus, ce répertoire contient les couples de clés privées/publiques identifiant votre hôtes :

Depuis OpenSSH 5.73, une nouvelle paire de clés a fait son apparition :

Régénérer les clés hôte

rm /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server

Accès sur une machine distante

Avec mot de passe

Si vous voulez vous connectez à la machine $hôte_distant avec l'utilisateur $utilisateur_distant, saisissez simplement

ssh $utilisateur_distant@$hôte_distant

et saisir votre mot de passe.

Si le nom d'utilisateur sur le système local et la machine distante sont les mêmes, vous pouvez omettre la partie $utilisateur_distant@ et saisir simplement

ssh $hôte_distant

Si c'est la première fois que vous vous connectez à l'hôte distant, ssh va vous demander si vous êtes certain de vouloir vous connecter à la machine distante. Répondez « oui » après avoir vérifié l'empreinte du serveur et entrez votre mot de passe, ainsi, ssh vous connectera à l'hôte distant.

Utilisation de clés partagées

ssh-keygen -t rsa

Ce programme va générer un couple de clés privé/publique dans le répertoire ~/.ssh. Le programme vous demande dans un premier temps le répertoire de destination des clés, par défaut votre répertoire personnel, une passphrase vous est ensuite demandé.

Notes : nous vous conseillons de ne pas laisser la passphrase vide. En effet, un attaquant qui aurait récupéré votre clé privée pourrait ensuite se connecter facilement à tous les hôtes sur lesquels vous avez déposé votre clé publique si la passphrase est vide. Pensez à choisir une passphrase longue et complexe.

Votre clé privée est id_rsa (vous devez ne jamais la fournir à un tiers), la clé publique est id_rsa.pub.

Vous devez copier votre clé publique sur l'hôte distant avec la commande ssh-copy-id

ssh-copy-id -i ~/.ssh/id_rsa.pub $utilisateur_distant@$hôte_distant

Vous pouvez maintenant vous connecter simplement à l'hôte distant, la passphrase vous est demandée. Une fois rentré, vous êtes connecté à l'hôte distant. En cas de nouvelles connections, la passphrase ne vous sera plus demandé durant toute votre session.

Sécurisation

/!\ L'utilisation de la dernière version disponible du paquet openssh-server permet de se protéger contre l'utilisation des failles de sécurité connues.

Options de configuration

(!) Il faut éditer le fichier /etc/ssh/sshd_config pour ajuster le paramétrage puis relancer le serveur ssh par

invoke-rc.d ssh restart

{i} Les options AllowUsers et AllowGroups n'amélioreront pas la sécurité d'un serveur SSH. Mais, dans certains cas, leur utilisation permet de résister un peu plus longtemps lors des attaques par force brute.

Outils externes

Fonctions complémentaires

Commandes supplémentaires

scp

scp $fichier_source $utilisateur_distant@$hôte_distant:$fichier_destination

scp $utilisateur_distant@$hôte_distant:$fichier_source $fichier_destination

sftp

mode texte

mode graphique

clusterssh

ssh-agent

eval `ssh-agent -s`

Ou, avec un shell C :

eval `ssh-agent -c`

Au premier chargement d'une clé privée, sa passphrase vous sera demandée et ssh-agent retiendra la clé. Par la suite, il ne sera donc plus nécessaire de la saisir.

ssh-add peut être utilisé pour gérer les clés retenues :

keychain

ssh-askpass

libpam-usb

Permettre l'accès à un réseau de l'extérieur à travers un firewall sans modifier sa configuration

Tunnel ssh pour sécuriser d'autres applications

options complémentaires

Applications graphiques (X11Forwarding)

pop3

imap

smtp

Divers

Les options de la ligne de commande SSH (les séquences après escape ~)

Options de configuration du fichier authorized_keys

 option1,option2,optionN type-de-clef clef-en-base64 commentaire.

Dépannage

Décalage de la version d'OpenSSL. Construit avec la version 1000105f, vous avez le numéro de version 10001060

Si vous avez un message d'erreur de ce type au démarrage du démon ssh, vous devez exécuter la commande :

apt-get install openssh-server openssh-client

Voir aussi le rapport de bogue.

Garder la connexion SSH active

Pour des raisons de sécurité, une connexion SSH est automatiquement fermée, par défaut, après un temps déterminé. Mais dans certains cas, vous voulez garder cette connexion ouverte, comme dans le cas d'un stockage sur le nuage à travers une connexion SSH.

Pour un serveur Debian 7.x

Étapes pour garder une connexion SSH active.

  1. Sur le serveur SSH modifiez le fichier "/etc/ssh/sshd_config"

  2. Ajoutez ce qui suit à la fin de ce fichier

    # Keep client SSH connection alive by sending every 300 seconds a small keep-alive packet to the server in order to use ssh connection. 300 seconds equal 5 minutes.
    ClientAliveInterval 300
     
    # Disconnect client after 3333 "ClientAlive" requests. Format is (ClientAliveInterval x ClientAliveCountMax). In this example (300 seconds x 3333) = ~999,900 seconds = ~16,665 minutes = ~277 hours = ~11 days.
    ClientAliveCountMax 3333
  3. En tant que superutilisateur redémarrez le service SSH

    service sshd restart

Un des meilleurs conseils de sécurité est d'avoir un mot de passe solide et d'appliquer les mises à jour de sécurité le plus rapidement possible. Mais qu'arrive-t-il si, même si vos utilisateurs ont les mots de passe les plus solide, mais laissent leurs session ssh ouverte et sans surveillance. Cela signifie que n'importe qui peut s'approcher du PC et, juste en se servant de la commande passwd, peut changer le mot de passe, et ainsi obtenir l'accès au serveur. Faites preuve de discernement.