Le protocole SSH (Secure Socket Shell) est très utilisé pour se connecter à un serveur, ou une machine, distant connectée à un réseau. Il permet d’échanger des fichiers, de créer, modifier ou lancer des scripts sur des machines distantes.
SSH est généralement installé de base dans les distribution Linux ou Windows.
Description du protocole SSH
Le protocole SSH (Secure Shell) est un protocole de communication cryptographique utilisé pour établir des connexions sécurisées et confidentielles entre deux systèmes informatiques via un réseau. Son principe repose sur l’utilisation de méthodes de chiffrement asymétrique et symétrique pour protéger les données transitant entre les systèmes. L’authentification des utilisateurs se fait généralement à l’aide de paires de clés cryptographiques, comprenant une clé publique et une clé privée, ce qui garantit une vérification sécurisée de l’identité de l’utilisateur. L’utilité principale du protocole SSH réside dans son rôle de sécurisation des accès à distance aux serveurs, de transfert de fichiers sécurisés et de gestion à distance des systèmes, offrant une protection robuste contre les menaces potentielles, notamment les attaques de type « man-in-the-middle » et les interceptions de données sensibles.
Ouvrir une session SSH
Pour se connecter à un appareil
ssh <host>@<serveur>
exemple pour un raspberry pi
ssh pi@192.168.1.2
Une fois la connexion établie, le moniteur vous demandera le mot de passe pour accéder au terminal distant.
Si votre machine distante le permet, le tag -X permet d’afficher les fenêtres de votre machine
ssh -X <host>@<serveur>
Copier un fichier distant avec le protocole SSH
La commande à utiliser pour copier un fichier d’une machine distante à une autre est la commande scp
scp <source> <destination>
scp root@192.168.1.33:script.py C:\Users\ADMIN
Un mot de passe sera demander pour valider la copie.
Se connecter avec un mot de passe
Sur linux, il est possible d’installer et d’utiliser SSH
sudo apt-get install sshpass
sshpass -p {password} ssh {user}@{ipaddress}
Sur Windows, Putty peut se charger de la gestion du mot de passe
Installer PuTTy puis ajouter le dossier de l’exécutable dans la variable d’environnement Path (C:\Program Files\PuTTY)
putty -ssh "root@192.168.1.32" -pw root #pour ouvrir une connexion en directe
Pour envoyer des commandes en direct, nous utilsons plink
plink -ssh <username>@<host> -pw <password> <command>
Exemple
plink -ssh root@192.168.1.32 -pw root uname -a
Utiliser Python pour envoyer des commandes SSH
Nous utilisons la bibliothèque subprocess pour exécuter des commande du terminal
import subprocess subprocess.Popen(f"ssh {user}@{host} {cmd}", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
Envoyer des commandes SSH nécessitant un mot de passe via Python
python3 -m pip install paramiko
ssh = paramiko.SSHClient() #ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #if missing ssh.connect(server, username=username, password=password) ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("uname -a") print("connected via SSH") print(ssh_stdout.read().decode()) ssh.close()