|
TP introduction à SSH
|
Le service ssh
sshd est un serveur qui permet de communiquer de façon sécurisée, en établissant un canal de communication entre lui et ses clients
- Installation : apt-get install ssh
allow SSH protocol 2 only --> yes
installer /usr/lib/ssh-keysign en SUID root ? --> yes
- Il fonctionne seul (et non comme telnet et ftp sous la dépendance du super-serveur inetd ou xinetd) et écoute les requêtes que lui adressent
les clients d'habitude au port 22 (voir grep ssh /etc/services)
- Votre serveur sshd est-il actuellement en exécution sur votre machine ? Comment feriez-vous pour arrêter ou
démarrer ce service ?
- Plus généralement, pour connaitre TOUS les serveurs réseaux à l'écoute, et ceux qui sont actifs,
utilisez netstat -atn (ou netstat -at). Plus d'infos : consulter le man(ual)
- Utiliser last | less sur votre machine locale pour connaitre les clients qui se sont connectés
récemment sur votre serveur sshd
- Problème rencontré
En cas de changement dans la correspondance client-serveur (par ex. changement de disque sur l'une des machines,
pour le meme nom ou la meme adresse IP), les clés ne corrrespondant plus, la connexion est refusée par sécurité.
Pour passer outre, intervenir dans le fichier $HOME/.ssh/know_hosts et supprimer la ligne décrivant la connexion
au serveur.
Session de travail cliente
- Pour en savoir plus sur le serveur ssh, consulter man ssh. Les fichier de configuration sont placés dans
/etc/ssh
- Syntaxe : ssh login@serveur, login étant un compte valide défini sur serveur.
A la place du nom du serveur, utiliser l'adresse IP, s'il y a une difficulté de résolution des noms ( ou renseigner le fichier
/etc/hosts)
- Connectez-vous au compte stage/stg du serveur voisin.
On se retrouve dans la même situation qu'avec telnet,
on peut prendre le controle à distance en tant que login
- ouvrir une session root sur le serveur, avec la commande su, mais
attention ! respectez l'environnement
- Y passer quelques commandes (sans rien abimer !).
en particulier créer un compte (login/mot de passe) sur cette machine voisine.
- Pour sortir de la session de travail ssh, taper exit
|
- Application à la gestion de serveurs distants sur SAMBAEDU3
- Se connecter sur un serveur ssh distant comme admin/fctice
- Y ouvrir une session root
- Les serveurs httpd (apache) et mysqld sont-ils en fonctionnement ?
Eventuellement les arreter et les démarrer.
- S'y connecter comme root de mysqld (mysql -u root -p).
Examiner les bases existantes (show databases;)
- Y créer une nouvelle base de données (mysql> create database cdi)
- Se déconnecter de mysqld, puis de la session superviseur, puis de ssh
|
Clients Windows
- putty : installer ce client telnet et ssh, ouvrir une session ssh comme stage/stg et lancer mc (exit
pour terminer)
- winscp 3.3 : client ssh sous licence GPL, c'est un véritable explorateur d'une machine Linux.
Au moment de l'installation, choisir le style Norton.
Se connecter comme stage/stg et explorer le système de fichiers
Faire des transferts de fichiers
Puis se connecter comme root (attention !)
|
Transfert de fichiers par scp
scp (secure copy), permet de copier des fichiers et des arborescences, en utilisant ssh pour sécuriser les
transferts
- syntaxe générale:
scp [-pr] source destination, où source et destination désigne l'ensemble des fichiers à copier ou le répertoire d'accueil.
Si les fichiers sont locaux, on utilise la syntaxe habituelle.
S'ils sont distants, la notation est celle de ssh : user@serveur:fichiers
L'option -p permet de préserver les droits et les dates des fichiers dans les copies.
- Exemples :
scp -r user@serveur:fichiers rep-local , pour copier du serveur distant les fichiers vers le répertoire rep d'accueil local
scp -r fichiers-locaux user@serveur:rep , pour copier les fichiers locaux vers le répertoire situé sur le serveur distant
- Effectuez les copies suivantes, en expliquant ce qui est fait. Vérifiez les résultats
[stage@p0x]$ scp /etc/services stage@p0y:/home/stage/
[stage@p0x]$ scp stage@p0y:/etc/passwd /home/stage/
- stage crée le répertoire d'accueil chez lui sur p0x. La copie se fait sur p0y, de p0y vers p0x
[stage@p0x]$ cd /home/stage ; mkdir tmp
[stage@p0y]$ scp -r /usr/share/doc/bash-doc stage@p0x:/home/stage/tmp/
- Copier le fichier
/usr/share/webmin0.92.tar.gz présent sur la station p10 dans /usr/local/
de votre station.
- Sauriez vous "rebondir", sur une 3ème machine ?
Exécuter des applications graphiques distantes (export display)
On a vu comment "prendre" la main sur une console distante avec ssh, et faire exécuter à distance des
applications.
On peut également faire afficher sur une console graphique cliente, des applications qui
s'exécutent sur le serveur X d'une machine distante.
Si les serveur et client sont convenablement configurés, on peut directement exécuter l'application distante par
ssh avec l'option -X. Pour cela, le serveur distant doit avoir la directive X11Forwarding yes dans
/etc/ssh/sshd_config, et le client local doit comporter la directive ForwardX11 yes
dans /etc/ssh/ssh_config.
[user@client]$ ssh -X login@serveur
[login@serveur]$ quanta &
# ou on peut utiliser ssh juste pour passer les commandes
# pour autoriser à utiliser le serveur X
[user@client]$ xhosts +
[user@client]$ ssh login@serveur
[login@serveur]$ export DISPLAY=iplocal:0.0
[login@serveur]$ xclock & # pour essayer
[login@serveur]$ konqueror & # pour travailler
Utiliser des clés de cryptage asymétrique pour l'authentification
- Principe en bref
Il est possible de s'authentifier sur un serveur ssh une fois par session de travail (habituellement c'est à chaque commande).
Pour cela on utilise l'identification par "agent" (c'est un petit logiciel résidant). C'est celui-ci qui s'occupe de transmettre les informations d'identification à chaque accès ssh en utilisant des couples clé privée / clé publique.
L'identification par clés asymétriques met en place 3 fichiers que l'agent utilisera :
- ~/.ssh/id_rsa : la clé privée qui permet de décrypter l'information et de s'identifier (en fournissant la "passphrase")
- ~/.ssh/authorized_keys : la liste des clés publiques autorisées à accéder au compte de l'utilisateur.
- ~/.ssh/id_rsa.pub : la clé publique (qui sert à crypter). C'est le fichier à transmettre à quiconque nous autorise à utiliser son compte, le contenu étant ajouté dans son fichier personnel authorized_keys.
- Contexte des manipulations
Localement, sur le poste de travail, nous sommes connectés sous le compte moi, et nous voulons établir ouvrir une session de travail au nom de l'utilisateur stage sur un seveur ssh distant.
- Se connecter comme moi sur la machine cliente
Générer une paire de clés :
ssh-keygen -t rsa
- entrer le fichier ( défaut : /home/moi/.ssh/id_rsa)
- entrer une phrase (fctice 2 fois)
the key fingerprint is :
da:cd:9c:da:cb:a5:16:d2:cd:ff:64:09:64:24:fc:4a moi@localhost
- Résultat
On constate la génération dans /home/stage/.ssh/
- de la clé privée correspondante dans le fichier id_rsa
(droit 600)
- de la clé publique dans id_rsa.pub (droit 644)
- Transférer la clé publique sur les serveurs
ssh-copy-id -i id_rsa.pub stage@ip
Ce qui crée le fichier ~/.ssh/authorized_keys sur la machine "serveur" d'adresse ip
Comparer son contenu avec celui du fichier local id_rsa.pub
- Test
A chaque connexion sur la machine distante, ssh demande la "passphrase" qui a servi à crypter la clé privée
$ ssh stage@ip
Enter pssphrase for key '/home/moi/.ssh/id_rsa' --> fctice
stage@ip:~$
- Utiliser ssh-agent
$ ssh-agent screen
$ ssh-add
Enter passphrase for /home/moi/.ssh/id_rsa:
--> fctice
Identity added: /home/jean/.ssh/id_rsa (/home/jean/.ssh/id_rsa)
(l'agent a enregistré notre clé, et s'occupe désormais des demandes de connexion à notre place !)
$ ssh stage@ip
stage@ip:~$
--> établissement de la session de travail directement !
exit
logout
Connection to ip closed.
$ ssh stage@ip
stage@ip:~$
- Mécanisme
L'utilisation de "l'agent" revient à ce que nous lui déléguions la tâche de nous représenter dans les phases d'authentication.
Il faut pour cela lui fournir une fois par session de travail la phrase de passe qui protège notre clé privée.
Par la suite, quand nous essayons d'établir une connection ssh, la machine distante envoit un message codé avec notre clé publique (contenue dans authorized_keys),
si nous pouvons le décoder (grâce à notre clé privée), alors la machine distante nous considère comme bien authentifié
Tant que la console est ouverte la surveillance par ssh-agent s'exerce !