Connexion SSH

Depuis Le 9 janvier 2017, pour se connecter aux serveurs du ResEl, il est nécessaire d'utiliser des clés SSH. Ce guide couvre comment se connecter aux serveurs ResEl et quelques bonnes pratiques.

À noter que je ne suis pas un expert en sécurité. J'essaie d'appliquer au mieux les bonnes pratiques que j'ai appris. N'hésitez pas à cross-checker les références et à mettre à jour le wiki en conséquence. Tout ce qui touche à la sécurité a une date d'expiration et qu'aucun algorithme est parfait.

Création de clé SSH

Systèmes GNU+Linux

Si vous êtes sur GNU+Linux, *BSD, ou autre système d'exploitation compatible, la commande à exécuter pour créer une clé SSH est la suivante :

ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa_resel -C "you@example.com"
où :
  • -t rsa est le type de clé à générer. À ce jour (janvier 2017) vous pouvez utiliser les clés ecdsa, ed25519, rsa. dsa est déconseillé.
  • -b 2048 est la taille de la clé en bits. Pour du RSA, il n'est pas vraiment utile d'utiliser des clés plus grande que 2048 bits
  • -f ~/.ssh/id_rsa_resel est le fichier ou sera enregistré la clé

Exécutez la commande et suivez les instructions (principalement choisissez un mot de passe pour chiffrer la clé). Vous découvrez donc deux fichiers ~/.ssh/id_rsa_resel et ~/.ssh/id_rsa_resel.pub. L'un est la clé privée et l'autre la clé publique. Ne partagez la clé privée avec personne, et gardez précieusement celle-ci sur votre ordinateur.

Windows

Si vous êtes sur Windows, il y a 2 méthodes. La première est d'utiliser PuTTY. Seuls PuTTY, PuTTYgen sont nécessaires pour la création de la clé SSH. Pour la connexion, il est très pratique d'utiliser Pageant, mais ce n'est pas indispensable.

La seconde est d'utiliser Git, voici un guide pour Windows. Dans le cas où vous utilisez Git, vous aurez à convertir votre clé privée en .ppk avant de pouvoir l'utiliser avec PuTTY et vous connecter sur les serveurs ResEl en SSH.

Certification de la clé

Pour le moment, la certification des clés au ResEl est relativement manuelle. Celle-ci est faite à l'aide d'un Playbook Ansible qui va envoyer les clés depuis le LDAP sur les passerelles et les différents serveurs.

Vous devez donc envoyer votre clé publique par e-mail signé cryptographiquement à l'adresse president@resel.fr. Bien évidement le président de l'association doit avoir confiance en votre clé GPG. Attention : envoyez la clé dans le corps du message et non en pièce jointe, celles-ci n'étant pas signées.

Connexion aux serveurs du ResEl

Une fois que le président ait validé votre clé puis enregistré celles-ci sur les passerelles, vous pouvez vous connecter sur celles-ci. La méthode la plus manuelle est :

ssh -i ~/.ssh/id_rsa_resel username@pegase.adm-pub.resel.fr  # pour Pegase
ssh -i ~/.ssh/id_rsa_resel username@resel.fr  # pour Yoshi
Si tout se passe bien vous êtes désormais connecté sur les passerelles.

Configurer OpenSSH pour se simplifier la vie

C'est bien pratique de taper des commandes à rallonge, mais c'est plus simple quand on se connecte en 3 caractères !

Je vous propose donc une petite configuration OpenSSH (pratiquement la mienne) qui vous fera économiser plein de caractères. Celle-ci se trouve dans le fichier ~/.ssh/config que vous aurez très certainement à creer.

Notes : Si vous recevez une erreur parlant de # à la fin de certaines lignes, il sera peut-être nécessaire de supprimer les commentaires, ou les mettre sur de nouvelles lignes.

# Configuration des passerelles ResEl
host pegase yoshi fronsac
    IdentityFile ~/.ssh/id_rsa_resel  # Spécifie la clé à utiliser
    User lcarr  # nom d'utilisateur sur la machine distante
    ForwardAgent no  # L'agent fowarding est une faille de sécu
    IdentitiesOnly yes  # Interdit la connexion par mot de passe
    ControlMaster auto # Multiplexage des connexions
    ControlPath /tmp/ssh_%h_%r


# Raccourcis
Host pegase
    Hostname pegase.adm-pub.resel.fr

Host yoshi
    Hostname resel.fr

Host fronsac
    Hostname rennes.resel.fr

# Proxy SSH pour gagner du temps
Host *.adm
    ProxyCommand ssh ssh.resel.fr nc -w 10 %h %p 2> /dev/null
    User lcarr

# Exception Agent SSH pour loustic 
Host loustic.adm
    ForwardAgent yes

Ainsi avec ce fichier de configuration il est possible de se connecter aux passerelles avec les commandes suivantes :

ssh pegase  # Passerelle interne
ssh yoshi  # Passerelle externe
ssh fronsac  # Passerelle de Rennes

D'autres raccourcis grâce à ce fichier pour se connecter aux machines directement

ssh skynet.adm  # Passe automatiquement par Pegase
ssh alphabet  # Pareil

L'utilisation des directives ControlMaster et ControlPath permet de multiplexer ses connexions SSH vers le ResEl, ce qui diminue grandement les temps de connexion et le nombre de processus lancés sur les passerelles.

L'agent SSH

warning Le fowarding d'agent est considéré comme dangereux et une grosse faille de sécurité. Veuillez utiliser le proxy ssh que le fowarding.

Si vous désirez utiliser exclusivement des clés SSH sur les serveurs du ResEl et éviter de taper votre mot de passe à tout bout de champ vous pouvez utiliser un agent ssh.

Copiez ces lignes dans votre fichier ~/.bash_profile ou ~/.zshrc (en remerciant Joseph M. Reagle Jr.) :

SSH_ENV="$HOME/.ssh/environment"

function start_agent {
     echo "Initialising new SSH agent..."
     /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
     echo succeeded
     chmod 600 "${SSH_ENV}"
     . "${SSH_ENV}" > /dev/null
     /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     #ps ${SSH_AGENT_PID} doesn't work under cywgin
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
         start_agent;
     }
else
     start_agent;
fi

Vous devrez ensuite ajouter votre clé à l'agent, à l'aide de la commande suivante :

ssh-add ~/.ssh/id_rsa_resel

Références


TODO (rédacteur)

  • nada :p