Projet

Général

Profil

Les clés SSH.

Généralités sur ssh

Les clés ssh sont une application de la cryptographie asymétrique dans le but de se connecter à une machine distante. Explications :

L'utilisateur A désire se connecter au serveur ECM de façon sécurisée sans avoir à entrer en permance un mot de passe (qui peut s'oublier, être découvert). Pour cela, il va générer une paire de clés ssh :

  • une clé privée qu'il gardera précieusement
  • une clé publique à placer sur le serveur.

Pour placer ladite clé sur le serveur, il faut (en général) s'y connecter par mot de passe.

Lorsque A va vouloir se connecter à ECM, son client ssh va tout d'abord regarder si des clés sont disponibles. Ici, A va tenter de se connecter avec sa clé privée. Comme sa clé publique est sur le serveur et qu'un couple de clés est unique, ECM sait que celui qui veut se connecter est A. Il autorise donc la connection.

Notons enfin que lors de la première tentative de connection au serveur, le client demande si on désire accepter la clé publique du serveur. Celle-ci va en effet être utilisée pour le reconnaitre par la suite. Il est évidemment recommandé de ne pas accepter de clés de serveur inconnus.

ssh sous GNU/Linux et autres Unix (*BSD, MacOS, etc.)

L'accès au dépôt se fait par clés ssh. Vous devez donc autoriser la connection à l'aide de votre paire de clé (vous pouvez également procéder de même pour vous connecter en ssh à vos comptes personnels ou d’association, il faut juste adapter les dossiers et les machines).

Pour créer une paire de clé ssh, lancez la commande : ssh-keygen. Ceci crée deux fichiers dans votre ~/.ssh :

  • id_rsa (votre clé privée à conserver précieusement)
  • id_rsa.pub (votre clé publique à transmettre).

Commande pour créer une paire de clés ssh dans un fichier dont on choisit le nom et le commentaire directement : ssh-keygen -f nom_du_fichier -C commentaire

Pour pouvoir utiliser votre clé publique ssh (~/.ssh/id_rsa.pub) dans le fichier authorized_keys dans votre compte de l'école (eg sur le sas) :

  • si la clé est dans votre compte:

  • cat /.ssh/id_rsa.pub\ >>/.ssh/authorized_key

  • si elle est sur votre machine perso, au choix :

  • ssh-copy-id login@sas1.ec-m.fr (recommandé)

  • ssh-copy-id -i nom_du_fichier_sans_extension_pub login@sas1.ec-m.fr si vous avez votre clé dans un autre fichier que id_rsa (recommandé)

  • cat /.ssh/id_rsa.pub\ |\ ssh\ LOGIN@sas1.ec-m.fr\ 'mkdir\ -m\ 700\ -p/.ssh ; cat >> .ssh/authorized_keys'

Vous pouvez avoir plusieurs couple de clés ssh sur votre machine (une par serveur par exemple). Auquel cas, leur donner un nom plus explicite peut s'avérer utile.

Dans votre dossier .ssh, vous pouvez aussi créer un fichier config pour, entre autre chose, créer un alias d'hôte ce qui vous évitera de taper par exemple ssh assos@sas1.centrale-marseille.fr mais juste ssh drupal (vous pourriez aussi utiliser un alias bash ou affilié pour atteindre ce but). Cette configuration est aussi valable avec scp et peut vous procurer une complétion des chemins sur l'hôte distant.

Si vous avez plusieurs clés sur votre machine, le fichier config s'avèrera obligatoire sinon, la bonne clé ne sera pas utilisée. exemple de fichier ~/.ssh/config :

<code>
host          drupal
  hostname      sas1.centrale-marseille.fr
  IdentityFile  ~/.ssh/nom_du_fichier_sans_extension_pub
  user          assos
  port          22
</code>

Si vous avez créé une clé avec une passphrase, celle-ci vous sera demandé à chaque connexion. Il existe des logiciels comme ssh-agent pour la stocker en mémoire temporairement.

ssh sous windows

Windows ne fournit pas de client ssh par défaut. Vous devez tout d'abord en installer un. Nous vous recommandons putty qui s'exécute directement dans le dossier où il est. Allez sur ce tuto pour plus de détails.

Néanmoins, ceci ne vous permet que d’avoir une console et pas de générer des clés.

C'est le programme puttygen (disponible ici) qui va s'en charger.

  1. Exécutez-le
  2. Cliquez sur Generate.
  3. Bouger la souris dans tous les sens (pour ajouter de l'entropie très difficile à obtenir avec une machine par nature déterministe).
  4. Sauvegardez votre clé publique et votre clé privée là où vous saurez les retrouver. Pensez à remplir le champ comment avec quelque chose qui vous identifie (vote identifiant CAS par exemple). Cela permettra de distinguer les clés ssh sur le serveur.

    Donnez leur un nom qui vous permette de les distinguer. Par exemple, key pour votre clé privé et key.pub pour votre clé publique.

    Les clés générées par puttygen ne sont compatibles qu’avec putty

Maintenant, vous devez placer ces clés sur le serveur. Pour cela :

  1. Connecter vous au serveur avec putty en entrant vote mot de passe
  2. Créer un dossier .ssh (s’il n’existe pas) mkdir ~/.ssh
  3. Ouvrez le fichier authorized_keys (ou créez le) : nano -w ~/.ssh/authorized_keys
  4. Copiez/Collez votre clé publique dedans sur une seule ligne avec le commentaire à la fin séparé par une espace du reste de la ligne.
  5. Sauvegardez

Ensuite, pour vous connecter au serveur à l’aide de ces clés avec le client putty :

  1. Ouvrez putty
  2. Dans Connexion > SSH > Auth, renseignez votre clé privée.
  3. Connectez vous au serveur comme d’habitude.

Connexion SSH avec rebond et ProxyCommand

Pour imbriquer des connexions SSH, il est possible d'utiliser la commande suivante : ssh -tt abraracourcixmachine1 ssh thebigboss@machine2@ (l'option -tt permettant d'accéder au terminal virtuel). Mais ce n'est pas très pratique et ça ne fonctionne que pour se logguer et pas avec scp, rsync,… De plus, si vous avez plusieurs clés, SSH peut s'avérer incapable de trouver la bonne. Heureusement, l'option ProxyCommand existe. Voilà un exemple de conf (à placer dans ~/.ssh/config) :

host abraracourcix
        hostname levillage.gaulois
        IdentityFile ~/.ssh/lacle
        user abraracourcix
        port 22

host thebigboss
        hostname jolitorax.britanica
        IdentityFile ~/.ssh/thekey
        user idefix
        port 22
        ProxyCommand ssh -q -tt abraracourcix -W %h:%p

Si vous rencontez des problèmes, l'option -o ControlPersist=no peut s'avérer utile. Remplacer la ProxyCommand par : ProxyCommand ssh -q -tt -o ControlPersist=no abraracourcix -W %h:%p