L’Informaticien Libre

Maîtrisez Linux pour une informatique libre et sans frontières

Utiliser SSH intelligemment

par | Fév 18, 2022 | Linux, Serveur | 0 commentaires

SSH est sûrement le protocole sécurisé le plus utilisé après https. En effet il permet en autre de se connecter au shell d’une machine distante de manière sécurisée très facilement. Mais pas uniquement.

Contents

Historique

Le SSH (Secure Shell) est née une nuit de pleine lune, déjà ça s’annonçait bien pour lui … 😃
Blagues à part si c’est l’historique de SSH qui vous intéresse voici la page wikipedia
Ici Je vais plutôt aborder des aspects pratique de ce protocole.

L’usage basique

L’installation

Si comme moi vous utilisez Linux Debian ou une distribution dérivée (Ubuntu, Mint, …) il suffit d’installer le paquet openssh-client

sudo apt install openssh-client

Bien entendu la machine sur laquelle vous voulez vous connecter doit avoir un serveur SSH installé et lancé

sudo apt install openssh-server

Afin de vérifier que le serveur tourne correctement il faut lancer la commande

sudo systemctl status sshd

Une réponse de ce type devrait apparaître

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-04-16 08:50:13 CEST; 7h ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 743 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 782 (sshd)
      Tasks: 1 (limit: 19033)
     Memory: 3.3M
        CPU: 15ms
     CGroup: /system.slice/ssh.service
             └─782 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

avril 16 08:50:13 PC-Olivier systemd[1]: Starting OpenBSD Secure Shell server...
avril 16 08:50:13 PC-Olivier sshd[782]: Server listening on 0.0.0.0 port 22.
avril 16 08:50:13 PC-Olivier sshd[782]: Server listening on :: port 22.
avril 16 08:50:13 PC-Olivier systemd[1]: Started OpenBSD Secure Shell server.

On voit bien l’état du service : Active: active (running)

Connexion avec SSH

Afin de se connecter au shell d’une autre machine il faut quelques pré requis :

  • Savoir avec quel utilisateur on veut se connecter
  • Connaître l’IP de la machine distante
  • Que le port 22 soit ouvert (ce qui est en général le cas)

La commande se compose comme suit

ssh <utilisateur>@<IP_machine>

par exemple un test consiste à se connecter avec son propre utilisateur sur la boucle réseau locale (127.0.0.1), ce qui donne dans mon cas

Connexion ssh sur la loopback

Pour savoir si on est dans une connexion SSH il faut entrer la commande

echo $SSH_CONNECTION

Dans le cas ci-dessus ça doit renvoyer quelque chose comme

127.0.0.1 44106 127.0.0.1 22

Si on est pas dans une connexion SSH cette commande ne renvoi rien.

Envoyer une (ou plusieurs) commande sans se connecter

Parfois on peut avoir envie d’envoyer une commande à un serveur sans forcément vouloir s’y connecter. Et bien c’est très simple, il suffit de mentionner cette commande entre guillemets à la suite de la commande de connexion

ssh <utilisateur>@<IP_machine> 'ls -l'

Et si on veut envoyer plusieurs commandes (soyons fou), on a simplement à les séparer par des points virgules.

Plusieurs commandes via SSH
Envoyer plusieurs commandes sans se connecter

Déconnexion

Pour sortir de la connexion SSH il suffit de faire la combinaison CTRL+D ou bien entrer la commande.

exit

Fonctionnalités

SCP

Par défaut SSH dispose d’un système de copie de fichiers, ça s’utilise assez instinctivement

scp root@10.10.0.5:/home/wam_laba/super_file /home/wam_ici/

Dans l’exemple on a copié le fichier /home/wam_laba/super_file du serveur 10.10.0.5 dans le répertoire local /home/wam_ici/

Pour copier des dossiers il faut utiliser l’argument -r (pour récursive)

scp -r root@10.10.0.5:/home/wam_laba/super_folder .

Dans cet exemple on copie tout le dossier super_folder dans le répertoire courant

SFTP

Qui est en gros du FTP (File Transfer Protocol) sur SSH.
C’est utilisé pour que les communications soient chiffrées c’est chaudement recommandé si quand on veut mettre en place un serveur accessible par internet. La mise en œuvre d’un serveur SFTP étant plutôt longue elle sera développée dans un autre article.

Attention à ne pas confondre SFTP et FTPS (qui est un autre protocole)

Ouvrir une fenêtre graphique distante

Il est aussi possible d’ouvrir une application graphique distante avec SSH il suffit de se connecter avec l’argument -X

ssh root@10.10.123.5 -X

À présent on peut ouvrir une fenêtre à partir de cette connexion, en lançant sa commande.

Outils

Autossh pour limiter les déconnexions

Parfois la connexion est instable pour de nombreuses raisons et il arrive de perdre la liaison SSH du coup on se prend des messages genre « broken pipe ». Cela peut vite devenir casse pied lorsqu’on travaille toute la journée connecté à des serveurs. Une solution pour minimiser ce problème est d’utiliser autossh

sudo apt install autossh

Autossh va automatiquement reconnecter une liaison perdue, de plus il va de temps en interroger la connexion afin d’éviter que le serveur SSH ne nous claque pas la porte au nez pour cause d’un timeout (inactivité).

autossh s’utilise simplement comme ssh.

autossh <utilisateur>@<IP_machine>

Mot de passe automatique avec sshpass

À chaque connexion SSH demande un mot de passe pour s’authentifier, cela devient vite casse pied si on se connecte des dizaines de fois par jour, il existe plusieurs solutions.

Les plus connues sont le partage de clé et sshpass. Ici on va s’intéresser à la deuxième solution.

Déjà il faut l’installer

sudo apt install sshpass

Ensuite on peut simplement l’utiliser avec le mot de passe en clair

sshpass -p <mot de passe> ssh <utilisateur>@<IP_machine>

Toutefois il vaut mieux éviter cette méthode qui laisse visible le mot de passe dans la console et encore pire dans le fichier ~/.bash_history.

Du coup on va faire les choses un peu mieux en mettant de mot de passe dans un fichier dans le répertoire ~/.ssh/ puis on va faire sorte que personne d’autre que l’utilisateur puisse lire le contenu de ce fichier.

touch ~/.ssh/pwd_file
echo "mot de passe" > ~/.ssh/pwd_file
chmod 600 ~/.ssh/pwd_file

Dans un environnement professionnel il vaut mieux à supprimer la ligne qui contient le mot de passe de l’historique (c’est plus prudent) ou alors écrire le mot de passe dans le fichier avec un éditeur de texte comme vim ou nano.

Maintenant pour la lancer la commande on fait

sshpass -f ~/.ssh/pwd_file ssh <utilisateur>@<IP_machine>

Bien entendu si on change ssh par autossh comme vu plus haut ça marche aussi 😉

Un système de fichier distant avec SSHFS

Il est aussi possible de monter en local un système de fichiers distant, ça ce nomme SSHFS pour SSH File System.

Comme d’habitude il faut l’installer, attention il doit être présent sur le serveur et le client.

sudo apt install sshfs

ensuite pour monter un local un répertoire

sshfs <utilisateur>@<IP_machine>:<répertoire_distant> <répertoire_local>

Le répertoire local doit exister, celui distant aussi bien entendu 😃

utilisation de sshfs

Maintenant dans le répertoire local /home/olivier/mnt/tmp on a accès au répertoire du serveur distant /home/olivier

Pour visualiser les points de montage on dispose de la commande

mount

Qui doit afficher le montage de fichier qu’on vient de faire avec brio.

Pour démonter on utilise

sudo umount <montage_local>

Ici dans notre exemple ça donnerais

sudo umount /home/olivier/mnt/tmp

Astuces

Désactiver la connexion avec root

Pour raisons de sécurité il est bon de désactiver la possibilité de se connecter a SSH directement via l’utilisateur root. Ceci pour une simple raison : tous les systèmes Linux ont un utilisateur root donc l’attaquant possède une information importante dès le début.
Pour désactiver la possibilité de se connecter directement avec root il faut éditer le fichier /etc/ssh/sshd_conf et modifier la ligne comme ci dessous

PermitRootLogin no

Puis relancer le démon SSH

sudo systemctl restart sshd

Faire un proxy socks5

Il arrive des situations dans lesquelles on a pas accès à un site à cause d’un filtre d’URL (souvent dans les entreprises qui veulent empêcher Germaine de la compta à passer sa journée sur Facebook). Mais en tant d’informaticien il nous est capital d’aller sur le site bloqué, en sachant que si on fait la demande au SI on en a pour 2 à 3 mois …

Il faut donc prendre les devants, et utiliser son serveur afin de détourner cette odieuse restriction de liberté.
Le principe est simple on va ouvrir une connexion SSH sur un port quelconque (il faut que ce port soit ouvert et > 1024 bien entendu) entre notre client et le serveur, puis on va dire au navigateur d’utiliser cette connexion.

ssh -D 9999 <utilisateur>@<serveur> -N

Ici on a ouvert une connexion vers notre serveur avec le port 9999 l’argument -N permet en gros de garder le tunnel ouvert pour que le trafic réseau puisse y passer.

Ensuite il faut paramétrer le navigateur, avec Firefox (le meilleur navigateur de tous les temps :-D) il faut aller dans les paramètres puis tout en bas de la section général, paramètres réseaux

Aller à la config réseau pour Proxy socks5 avec Firefox

Et entrer les informations du proxy socks5

Proxy socks5 avec Firefox

Maintenant avec cette instance de Firefox on peut naviguer tranquille sans restriction d’URL

Attention sur le serveur la redirection d’IP doit être activée, pour vérifier ça on fait

cat /proc/sys/net/ipv4/ip_forward

Le résultat doit être 1, sinon il faut entrer la commande (en utilisateur root)

echo 1 > /proc/sys/net/ipv4/ip_forward

Bannir les pirates en herbe avec fail2ban

Fail2ban est un petit logiciel qui va bannir les adresses IP qui vont tenter de se connecter à votre serveur et échouer, c’est à dire qui vont entrer le mauvais utilisateur ou mot de passe. Par défaut si quelqu’un se plante 5 fois en moins de 10 minutes il est banni pendant 10 minutes.

sudo apt install fail2ban

Faîtes gaffe à ne pas oublier votre nom d’utilisateur et son mot de passe sinon ça risque d’être chia… (je dis ça en connaissance de cause 😓)

0 commentaires

Trackbacks/Pingbacks

  1. SFTP Créez votre stockage en réseau sécurisé - L'Informaticien Libre - […] pour SSH File Transfer Protocol est un très bon moyen d’avoir un système de fichier en réseau avec […]

Laisser un commentaire

Rejoins la Newsletter

Sois informé directement des nouveautés du site



Merci pour votre inscription