Un serveur SSH sert principalement à prendre le contrôle de la machine sur lequel il est installé depuis un autre poste,le client. Évidemment c'est une définition très réductrice des possibilités offertes par un serveur SSH, je laisse le loisir au lecteur de se documenter à droite, à gauche et ailleurs.
L'implémentation libre de référence du protocle SSH est OpenSSH et c'est donc celui-ci que nous allons utiliser.
$ sudo aptitude install openssh-server
Cette commande permet d'installer le serveur sshd ainsi que le paquet openssh-blacklist qui est une dépendance requise.
Votre serveur SSH est opérationnel !
Il ne nous reste plus qu'à affiner sa configuration.
La configuration du serveur se passe dans le fichier /etc/ssh/sshd_config.
Si la machine qui sert de serveur SSH est accessible par ce biais depuis l'Internet ce peut être une bonne idée de changer le port afin de limiter les connections non désirées.
On décide de n'utiliser que la version 2 du protocole ssh.
Par défaut le serveur “drop” les connections si l'utilisateur n'entre pas son mot de passe au bout de 2 minutes. On réduit ce temps à 1 minute. Attention passer cette valeur à zéro désigne un temps infini!
On supprime la possibilité de se logger directement avec le compte root.
Cette option indique au serveur SSH de vérifier que l'utilisateur ai bien un compte actif sur cette machine (shell valide, un répertoire $HOME dont il est le propriétaire, un dossier ~/.ssh en 700, etc.) avant de lui autoriser la connection.
le serveur va autoriser 3 tentatives d'identification avant de “dropper” la connection.
un seul utilisateur ne pourra ouvrir “que” 5 sessions par connection (si il vous en faut plus d'une regardez déjà du coté de screen ou de tmux ;)
seuls les utilisateurs pierre, paul et jack pourrons ouvrir une session sur ce serveur
cette option peut être remplacée par **AllowGroups mon_groupe_ssh**, il faudra alors faire parti du groupe "mon_groupe_ssh" pour ouvrir une session.
pas de mot de passe , pas de session!
si il n'y à pas de raison de faire du tunneling X11 alors cette option peut être passée à “no”
Cette option permet de contraindre le démon sshd à créer un processus non privilégié pour la phase d'identification puis ensuite un processus qui bénéficie des privilèges liés à l'identification.
en lieu et place d'identification par mot de passe (cependant transmit dans un tunnel chiffré) nous allons utiliser le système d'identification par clés publique/privée basée sur l'algorithme de cryptographie asymétrique RSA. le fichier qui renferme la liste des clés publiques autorisant une connection est stockée dans ~/.ssh/authorized_keys. l'identification par mot de passe est désactivée.
N.B.: Fail2ban et SSHGuard permettent aussi d'accroître la sécurité de ssh (entre autre).
Dans la configuration nous préconisons de ne permettre que des connexions par échange de clés. Cela se nomme authentifier, car en plus de m'identifier je vais présenter un certificat attestant mon identité.
Dans une invite de commande (Shell) saisir sous son identité la commande:
$ ssh-keygen -t rsa -b 1024 -C "monlogin@serveur"
Generating public/private rsa key pair. Enter file in which to save the key (/home/users/monlogin/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/users/monlogin/.ssh/id_rsa. Your public key has been saved in /home/users/monlogin/.ssh/id_rsa.pub. The key fingerprint is: 96:9a:63:e8:08:08:7f:69:ee:b0:b4:74:57:20:c4:83 monlogin@serveur The key's randomart image is: +--[ RSA 1024]----+ | o. | | E.o | | ... | | . . . | |. S | |o. o = | |o = %%*%% %%*%% | | + @ o . | | +.+ | +-----------------+ $
Cette commande a pour effet de créer 2 fichier dans le répertoire ~/.ssh de votre $HOME: ~/.ssh/id_rsa ~/.ssh/id_rsa.pub