TP introduction à SSH



Le service ssh

Session de travail cliente

  1. Pour en savoir plus sur le serveur ssh, consulter man ssh. Les fichier de configuration sont placés dans /etc/ssh
  2. 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

  3. Application à la gestion de serveurs distants sur SAMBAEDU3
    
    
    1. Se connecter sur un serveur ssh distant comme admin/fctice
    2. Y ouvrir une session root
    3. Les serveurs httpd (apache) et mysqld sont-ils en fonctionnement ? Eventuellement les arreter et les démarrer.
    4. S'y connecter comme root de mysqld (mysql -u root -p). Examiner les bases existantes (show databases;)
    5. Y créer une nouvelle base de données (mysql> create database cdi)
    6. Se déconnecter de mysqld, puis de la session superviseur, puis de ssh

Clients Windows

  1. putty : installer ce client telnet et ssh, ouvrir une session ssh comme stage/stg et lancer mc (exit pour terminer)
  2. 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
  1. 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.
  2. 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
  3. 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/
    
  4. 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/
    
  5. Copier le fichier /usr/share/webmin0.92.tar.gz présent sur la station p10 dans /usr/local/ de votre station.
  6. 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

  1. Principe en bref
  2. 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 :
  3. Contexte des manipulations
  4. 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.
  5. Se connecter comme moi sur la machine cliente
  6. 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
    
  7. Résultat
  8. 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)
  9. Transférer la clé publique sur les serveurs
  10. 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
  11. Test
  12. 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:~$                                  
    
  13. Utiliser ssh-agent
  14. $ 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:~$
    
  15. Mécanisme
  16. 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 !