--- 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/)". ----