Objectifs
- Se connecter à un serveur distant pour obtenir un shell interactif avec
ssh. - Exécuter une commande à distance sans ouvrir une session complète.
- Transférer des fichiers de manière sécurisée entre votre machine et un serveur avec
scp. - Comprendre l’importance de l’authentification par clé pour l’automatisation.
ssh : Le portail sécurisé
ssh (Secure Shell) est le protocole standard pour administrer des machines Linux à distance. Toute la communication est chiffrée, ce qui garantit la confidentialité et l’intégrité de vos commandes et de vos données.
Se connecter en mode interactif
C’est l’usage le plus courant. Vous ouvrez une session shell complète sur la machine distante.
ssh utilisateur@adresse_du_serveur
La première fois que vous vous connectez à un nouveau serveur, SSH vous demandera de vérifier l’empreinte (“fingerprint”) de sa clé. C’est une mesure de sécurité pour s’assurer que vous vous connectez bien à la bonne machine.
Exécuter une seule commande
Vous n’avez pas toujours besoin d’un shell complet. Vous pouvez passer une commande directement à ssh.
# Exécute 'uptime' sur le serveur distant et affiche le résultat localement
ssh utilisateur@serveur "uptime"
# Lister le contenu d'un dossier à distance
ssh utilisateur@serveur "ls -l /var/www"
Cette méthode est extrêmement utile pour les scripts d’automatisation.
L’authentification par clé (Rappel)
Comme vu dans le cours DevOps, se connecter avec un mot de passe est déconseillé. La méthode professionnelle est l’authentification par clé SSH. Elle est non seulement plus sûre, mais elle est aussi indispensable pour les scripts automatisés, qui ne peuvent pas taper un mot de passe.
ssh-keygen: Pour créer votre paire de clés (privée/publique).ssh-copy-id utilisateur@serveur: Pour installer votre clé publique sur le serveur.
scp : Copier des fichiers de manière sécurisée
scp (Secure Copy) utilise SSH pour transférer des fichiers. Sa syntaxe est très similaire à celle de la commande cp.
scp <source> <destination>
- Une ressource locale est un chemin normal :
/chemin/fichier.txt - Une ressource distante est de la forme :
utilisateur@serveur:/chemin/distant/fichier.txt
1. Copier un fichier de votre machine vers le serveur
# scp <fichier_local> <user@serveur:chemin_de_destination>
scp mon_rapport.pdf alice@serveur.com:/home/alice/documents/
2. Copier un fichier depuis le serveur vers votre machine
# scp <user@serveur:chemin_distant> <destination_locale>
# Le '.' à la fin signifie "le dossier courant"
scp alice@serveur.com:/var/log/nginx/access.log .
3. Copier un dossier entier
L’option -r (récursif) permet de copier un dossier et tout son contenu.
scp -r mon_projet/ alice@serveur.com:/var/www/
rsync : Une alternative plus puissante
Pour synchroniser des dossiers entiers, rsync est souvent un meilleur choix que scp -r. Il est plus intelligent car il ne transfère que les parties des fichiers qui ont changé, ce qui le rend beaucoup plus rapide pour les mises à jour.
rsync -avz mon_projet/ alice@serveur.com:/var/www/mon_projet/
Bonnes pratiques
- Configurez et utilisez systématiquement l’authentification par clé.
- Pour les transferts de dossiers, surtout s’ils sont volumineux ou fréquents, privilégiez
rsyncàscp. - Utilisez le fichier
~/.ssh/configpour définir des alias pour vos connexions fréquentes, afin de ne pas avoir à retaper l’utilisateur et l’adresse à chaque fois.
Exercices
(Ces exercices nécessitent un accès SSH à une autre machine, par exemple une machine virtuelle).
-
Connexion et commande simple :
- Connectez-vous à votre machine distante avec
ssh. - Une fois connecté, quittez la session avec
exit. - Maintenant, exécutez une commande à distance pour connaître la version du noyau de la machine distante :
ssh user@host "uname -r".
- Connectez-vous à votre machine distante avec
-
Transfert vers le serveur :
- Créez un fichier
test_scp.txtsur votre machine locale. - Utilisez
scppour le copier dans le dossier/tmpde la machine distante. - Connectez-vous en
sshet vérifiez que le fichier est bien arrivé avecls /tmp/test_scp.txt.
- Créez un fichier
-
Transfert depuis le serveur :
- Utilisez
scppour télécharger le fichier/etc/hostsdepuis la machine distante vers votre dossier local. - Vérifiez son contenu avec
cat.
- Utilisez