---
title: "SSH : Mieux Connaître le Protocole SSH"
date: 2017-07-28T14:59:05+01:00
description: "Apprendre ce qu'est SSH : son protocole, son usage correct au quotidien, ses particularités."
draft: false
lastmod: 2020-02-19T15:51:05+01:00
tags: ["SSH"]
---
## Installation d'OpenSSH
### Debian & *Buntu
Sur une Debian GNU/Linux, ou une *Buntu, et autre dérivées :
`apt install ssh`…
Quelle que soit la distribution Linux utilisé, le fichier de
configuration se trouve être `/etc/ssh/sshd_config*`.
### OpenBSD
Sur OpenBSD, c'est installé dans le système de base !
## Utilisation de SSH
SSH est très facile à utiliser :
### Connexion à distance vers le serveur
`ssh server.domaine.com` ou `ssh adresse_ip` est la méthode de base.
Dans ce cas, si la connexion se fait, il vous sera demandé votre nom
d'utilisateur sur ce serveur, et le mot de passe correspondant.
`ssh votre_nom_user@server.domaine.com` ou
`ssh -l votre_nom_user server.domaine.com` est la manière de spécifier
explicitement votre nom d'utilisateur.
Dans ce cas, dès la connexion établie, il ne vous sera demandé plus que
le mot de passe correspondant à votre identifiant utilisateur.
### Exécution de commandes à distance
Il suffit d'établir une connexion avec la commande à lancer :
`ssh votre_nom_user@server.domaine.com date`
Précisément, cette commande interroge le serveur pour connaître ses date
et heure.
### Copie de fichier à distance
C'est la commande `scp`, tout autant sécurisée, qui le permet aussi
simplement.
`scp monfichier votre_nom_user@server.domaine.com:/~/` enverra le
fichier dans votre répertoire personnel sur le serveur en question.
`scp votre_nom_user@server.domaine.com:/~/monfichier monfichier` ira
chercher sur le serveur votre fichier et le déposera dans votre
répertoire en cours.
Pour faire une copie récursive d'un répertoire :
`ssh -r /votre_rep votre_nom_user@server.domaine.com:/~/`
### Transfert ftp
Le transfert de fichiers par ftp, de manière sécurisée, est aussi
possible…
Utilisez la commande suivante : `sftp votre_nom_user@server.domaine.com`
Certains clients FTP graphique acceptent ce mode de connexion, il suffit
de choisir le mode de connexion **sftp over SSH2**.
## Authentification sécurisée par SSH
### Configuration du service
OpenSSH permet des méthodes diverses d'authentification, et ce en
fonction de la politique de sécurité privilégiée.
- Une des premières choses à faire est d'interdire l'accès au compte root, afin de ne pas "tenter le diable" :
Il faut donc modifier la ligne `PermitRootLogin` en lui donnant la valeur **no**.
- Forcer la sécurité sur la deuxième version du protocole est à envisager sérieusement ;
par la modification de la ligne **Protocol** en lui donnant la valeur `2` *(version de protocole plus sécurisée)*
- Créer l'authentification par mot de passe, et interdire les mots de passe vides.
Donc s'assurer que la ligne `PasswdAuthentication` soit à `yes` et que `PermitEmptypasswords` soit à `no`.
- Encourager l'authentification par clé publique est à promouvoir ; car une clé appartient à un utilisateur et un seul...
Cela signifie positionner la ligne `PubkeyAuthentication` à `yes` et supprimer le symbole dièze devant la ligne `AutorizedKeysFile`.
- Pour finir par supprimer les protocoles moins sécurisés :
ce qui signifie d'imposer aux lignes `RSAAuthentication`, `RhostsAuthentication`, `RhostsRSAAuthentication` et `HostbasedAuthentication` la valeur `no` et d'ignorer `IgnoreRhosts` par `yes`, si elles sont présentes dans le fichier !
- Pour information, il est possible de manière rudimentaire et exclusive de spécifier les autorisations uniquement à certains utilisateurs ou à un groupe d'utilisateurs.
On se servira pour cela des directives `AllowUsers` et `AllowGroups` que l'on ajoutera au fichier de configuration.
Une fois le fichier `sshd_config` modifié, pensez donc à
(re)démarrer le service :
`/etc/init.d/sshd restart` ou `service ssh restart`
### Usage de clé publique
L'usage de clé publique ayant été notifié dans le fichier de
configuration et aux utilisateurs,il est possible de les créer par la
commande suivante `ssh-keygen`.
* `ssh-keygen -t rsa -b 2048`
{{< note warning >}}
ATTENTION : Il est recommandé les deux choses suivantes :
- {{< color red >}}ne pas générer des clés plus petites que 2048 bits{{< /color >}}, **préférez** une valeur de
**4096 bits** ;
- de même, {{< color red >}}les protocoles de chiffrement **DSA** et
**ECDSA** ne doivent plus être utilisés{{< /color >}}… **utilisez RSA** ou au mieux un protocole de chiffrement à courbes elliptiques, tel ed25519 !
Pour plus d'informations, veuillez lire mon autre {{< inside2 l="sec:ssh:configuration-securisee" t="article" >}}
{{< /note >}}
Lors de la génération de celle-ci, il vous sera demandé de taper une
passphrase que vous choisirez consciencieusement.
Dans un cas, comme dans l'autre, cela crée une clé privée et une clé
publique dans votre répertoire personnel `$HOME/.ssh/` ;
pour les
clés RSA, ce sont les fichiers **id_rsa** et **id_rsa.pub**,
et réciproquement pour les autres clés.
Veillez à ne jamais fournir la clé privée, et ce sous aucun
prétexte. Votre sécurité en dépend fortement !
Une fois, vos clés générées, copiez votre clé publique sur le serveur :
`scp -p $HOME/.ssh/id_rsa.pub votre_nom_user@server.domaine.com:/~/.ssh/authorized_keys`
Ensuite on va garder en mémoire la passphrase dans notre ordinateur afin
de ne pas être obligé de la taper à chaque fois :
`eval ssh-agent ssh-add`
Pour la dernière fois, il va vous être demandé de taper votre passphrase, faites-le.
Lors de vos prochaines connexions en SSH sur le serveur, il ne vous
restera plus… qu'à travailler !
### Création de Tunnel
Pour créer un tunnel de connexion ssh, qui permette d'encapsuler
d'autres protocoles, il vous faut vous l'écrire ainsi :
`ssh -L numero_port_encapsulé:adresse_ip_local:numero_port_routé adresse_ip_server`
* L'option `-L` indique l'exécution locale,
* L'option `-R` indique l'exécution à distance.
### Tunnel X
Pour créer un tunnel graphique X-Windows, il faut d'abord vérifier que
l'option `X11 Forwarding` soit à `yes` dans le fichier
`/etc/ssh/sshd_config`.
Cela étant fait, il ne vous reste plus qu'à vous connecter à votre hote
distant :
`ssh -X nom_machine.nom_domaine.tld`
Il est possible de lancer en même temps une application :
`ssh -X nom_machine.nom_domaine.tld nom_logiciel &`
----
Ce mémo a été écrit la première fois, par mes soins, sur mon autre site
"[Mémoire Grise
Libérée](https://memoire-grise-liberee.fr.eu.org/Linux/securite/ssh/)".
----