telnet, ssh, scp
Introduction
-
Telnet est un client et un serveur.
-
Cette application permet de se connecter à un serveur et de pouvoir exécuter toutes les commandes comme si vous étiez connecter directement au serveur.
-
Il s’agit d’une prise en main à distance mais uniquement en ligne de commande.
-
Telnet existe sur Linux et Windows.
-
Le problème de telnet est la sécurité qui est grandement amélioré avec ssh.
Installation de telnet
Pour installer le client:
$ dnf install telnet
Pour installer le serveur:
$ dnf install telnet-server -y
Pour démarrer le service telnet:
$ systemctl start telnet.socket
Désactiver le firewall
$ systemctl stop firewalld
Fonctionnement de telnet
Pour se connecter à un serveur telnet il faut utiliser le client telnet:
$ telnet <ip ou nom du serveur telnet>
-
Vous devrez fournir les informations d’authentification: login et mot de passe.
-
Une fois connecté, toutes les commandes que vous entrez s’exécuteront sur la machine distante.
-
Le gros problème de telnet est la sécurité.
-
Lorsque vous vous authentifiez dans la session telnet, le mot de passe est échangé en clair sur le réseau.
-
En fait toutes les informations sont échangées en clair pendant une session telnet.
-
Pour cette raison, telnet n’est presque plus utilisé pour la prise en main à distance mais seulement pour du diagnostic.
-
Il n’est plus installé par défaut sur Windows.
Laboratoire 1
Vous devez avoir 2 machines Linux dans le même réseau virtuel, elles doivent pouvoir communiquer l’une avec l’autre (soit 2 machines sur votre poste, soit vous pouvez travailler à 2 en utilisant des interfaces bridge).
- Le serveur telnet doit être installé sur l’une des deux machines et le client telnet sur l’autre machine.
Sur le serveur tapez:
tcpdump -i [interface] -XX -s 0 tcp port 23
À partir du client:
telnet [ip serveur]
Notez que quand vous tapez le mot de passe, chaque caractère est envoyé en clair et se voit dans la capture tcpdump
.
ssh
-
ssh = Secure Shell
-
ssh permet, entre autres, de prendre en main une autre machine Linux mais cette fois, la connexion est très fortement cryptée.
-
Aucun message en clair ne passe sur le réseau.
-
SSH utilise le port
TCP 22
par défaut mais il peut être configuré pour utiliser un autre port. -
Il est possible de spécifier l’utilisateur avec lequel on se connecte (l’utilisateur doit exister sur la machine cible):
$ ssh user@host
-
ssh est disponible sur toutes les distributions Linux et Unix.
-
ssh permet aussi d’exécuter une commande à distance:
$ ssh user@host commande
Laboratoire 2
-
Démarrez deux machines Linux (A et B).
-
Ouvrez une session sur A.
-
En vous plaçant sur A, utilisez SSH pour exécuter la commande ls sur B.
-
Quel est le répertoire dont vous voyez le contenu?
-
Pouvez-vous afficher le contenu d’un autre répertoire?
-
Pouvez vous donner un chemin absolu? Un chemin relatif?
-
Depuis A, ouvrez une session avec ssh sur la machine B.
-
Lancez la commande top.
-
Quel CPU est utilisé? Celui de A ou celui de B?
SCP
-
SCP = SeCure Copy
-
La suite ssh permet aussi de copier des fichiers entre serveurs Linux.
-
Pour copier du serveur local au serveur distant (dans le répertoire de l’utilisateur):
$ scp fichier user@serveur:
Ou en utilisant un chemin relatif par rapport au répertoire de l’utilisateur:
$ scp fichier user@serveur:Bureau
Ou en utilisant un chemin absolu:
$ scp fichier user@serveur:/home/user
Il est possible de copier du serveur distant au serveur local, depuis le répertoire de l’utilisateur vers le réperoire courant (chemin relatif):
$ scp user@serveur:fichier .
Ou en utilisant un chemin relatif distant et absolu local:
$ scp user@serveur:Bureau/fichier /etc
Ou absolu dans les deux cas:
$ scp user@serveur:/etc/services /etc
Laboratoire 4
-
Créer un fichier de test contenant votre nom.
-
Copiez le sur la machine distante:
-
Dans le répertoire de l’utilisateur distant
-
Dans
/mnt
. Est-ce possible? Pourquoi? Comment résoudre le problème?
-
-
Allez sur la machine distante, modifiez le fichier que vous avez placé dans
/mnt
pour y ajouter la date. -
Retourner sur la machine locale.
-
Copiez le fichier se trouvant dans /mnt sur la machine distante pour le placer dans le répertoire courant.
-
Copiez le fichier se trouvant dans /mnt sur la machine distante pour le placer dans /mnt de la machine locale.
Les clés de chiffrements
- Pour créer un couple de clés:
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/axel/.ssh/id_rsa):
Created directory '/home/axel/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/axel/.ssh/id_rsa.
Your public key has been saved in /home/axel/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:iCjIFYCiTFXPTjLvVDqsWjQYKNMIR0OH+xWwF1v2Z3U axel@m1.dom.local
The key's randomart image is:
+---[RSA 2048]----+
|o+B++o. o . E|
|+=oo..+= . . . |
|O..+.oo= .. o |
|=oo.ooO.o o |
|o..o.+.BS |
| . o = . |
| o . |
| o |
| . |
+----[SHA256]-----+
Par défaut, les clés sont créées dans ~/.ssh/
et se nomment id_rsa et id_rsa.pub
.
ATTENTION: la clé privée id_rsa
doit être protégée: permission 400
et ne doit jamais être distribuée.
Connexion ssh sans mot de passe
À l’aide d’un couple de clés on pourra se connecter à une machine distante en utilisant ssh sans avoir besoin de mot de passe.
Pour cela, il faudra signer le message à l’aide de la clé privée. Ceci permet de prouver notre identité.
On signe un message à l’aide de la clé privée, ce message est envoyé à la machine distante. Si la machine distante peut décrypter le message à l’aide de la clé publique correspondant à la clé privée, cela signifie que l’identité de l’utilisateur a été vérifiée et qu’il peut donc se connecter.
Pour cela, il faudra préalablement copier la clé publique sur la machine distante.
Puis il faut la placer dans le fichier ~/.ssh/authorized_keys
de l’utilisateur qui sera autorisé à se connecter sans mot de passe.
Pour copier la clé dans le fichier:
$ cat id_rsa.pub > ~user/.ssh/authorized_keys
Toutes les autres clés qui seront ajoutées ensuite devront l’être avec:
$ cat id_rsa.pub >> ~user/.ssh/authorized_keys
Les permissions sur le fichier authorized_keys
doivent être 600
et elles doivent être 700
sur le répertoire .ssh
.
Laboratoire 5
-
Sur la machine locale, générez un couple de clés RSA.
-
À l’aide de scp, copiez la clé publique sur la machine distante.
-
Placez la clé publique dans le fichier
authorized_keys
. -
Testez que vous pouvez vous connecter sans mot de passe.
-
Ajoutez la clé d’un deuxième utilisateur dans le même fichier
authorized_keys
.
Testez que les deux utilisateurs peuvent se connecter au même compte distant sans mot de passe.
Le problème est qu’il faut toujours entrer la passphrase lors d’une connexion ssh.
Pour cela on utilise la commande ssh-add qui va faire passer la passphrase à ssh-agent.
$ ssh-add [chemin/clef privée]
On saisit la passphrase et on peut maintenant se connecter sans entrer ni passphrase ni mot de passe.
Laboratoire 5bis
En utilisant ssh-add
et ssh-agent
stockez la passphrase de votre clé privée en mémoire et assurez-vous que vous pouvez maintenant vous connecter sans mot de passe ni passphrase.