-
Création d'un serveur ssh avec authentification par clés
Secure Shell (SSH) est un protocole de communication sécurisé permettant de faire des connexions sécurisées entre un serveur et un client SSH.
Le protocole de connexion impose un échange de clés de chiffrement en début de connexion.
Tutoriel réalisé sur Ubuntu 11.04 Natty Narwhal
Télécharger « fichier_configuration_ssh.pdf »
Installation du serveur SSH
Pour installer le serveur SSH, il suffit simplement de taper la commande suivante dans un terminal
sudo apt-get install opensh-server
Création d'un répertoire .ssh (coté client et serveur)
Aller dans le répertoire /home/utilisateur a l'aide de la commande cd.
faire mkdir ~/.ssh pour créer le dosssier .sshensuite faire chmod 0700 ~/.ssh
Génération d'une clé sur le pc clientici, je vais créer une paire de clés DSA d'une longueur de 2048 bits
ssh-keygen -t dsa -b 2048 -f ~/.ssh/id_server (Vous pouvez choisir de mettre ou pas un mot de passe sur ces clés)Attention à bien noter le fingerprint lors de la génération de la clé.
On se retrouve alors avec 2 fichiers dans .ssh :
id_server => clé privée qui ira sur vos machines clients
id_server.pub => clé publique qui ira sur votre serveurCopie de la clé client sur le serveur avec la commande scp
scp -P (port_ssh) ~/.ssh/id_server.pub (utilisateur_serveur)@(ip_serveur):~/.ssh/authorized_keys
PS : la commande ssh-copy-id -i ~/.ssh/id_server.pub (utilisateur_serveur)@(ip_serveur) aura la même fonction.
Le port par défaut du ssh étant le 22.
Le fichier AuthorizedkeysFile contenant les clés des client autorisés a se connecter au serveurVérifier sur le serveur que le fichier authorized_keys a bien été crée :
cd /home/utilisateur/.ssh
Et faire la commande ls pour vérifier la présence du fichier.
Vérification de la connection au serveur du coté client :
ssh -p(port_ssh) utilisateur_du_serveur@ip_du_serveurLors de la première connexion SSH depuis le client vers le serveur, le serveur demande si le fingerprint de la clef publique présentée par le serveur est bien le bon.
Pour être sûr que l'on se connecte au bon serveur, on doit connaître le fingerprint de la clé publique (celui qui a été noté lors de la génération de la clé) et comparer cette clé à celle qu'il affiche.
Si les deux fingerprints sont identiques, répondre yes, cette action va alors rajouter directement la clé publique du serveur dans le fichier ~/.ssh/known_hosts du client.
(cliquer pour ouvrir l'image)
L'authentification par mot de passe (transmis chiffré) est le mode d'identification par défaut ( si une personne connaît votre mot de passe, la sécurité est compromise ).
Nous allons donc forcer l'authentification par clé publique/privée au lieu des mots de passe.
Ainsi pour se connecter au serveur, il faudra être en possesion de la clé privé et le mot de passe de cette clé.
Sur le serveur ouvrir et modifier le fichier sshd_config situé dans /etc/ssh (voir fichier configuration joint ).
sudo nano /etc/ssh/sshd_config
Décommenter la ligne AuthorizedkeysFile afin que les clés des clients puissent être prises en compte par le serveur
A la ligne PubkeyAuthentication changer le no en yes afin d'autoriser la connection uniquement par clés.
A la ligne PasswordAuthentication changer le yes en no afin d'interdire la connection par mot de passe.
Changer le port par défaut de ssh dans ce même fichier pour améliorer la securite du serveur.
A la ligne Port changer le port 22 par le port de votre choix.
Empécher la connection au serveur en root.
A la ligne PermitRootLogin changer le yes en no.
Enregistrer votre fichier.
Redémarrer votre serveur ssh avec la commande :sudo /etc/init.d/ssh restart
Maintenant pour se connecter à votre serveur vous n'aurez plus besoin de vous identifier avec votre mot de passe utilisateur,mais uniquement avec la clé privée et la passphrase de celle-ci.
Vous pourrez vous connecter à votre serveur ssh en sftp via le client ftp filezilla ou l'émulateur de terminal Putty.
Si vous avez un pare-feu d'activé sur votre serveur, n'oubliez pas d'ouvrir le port ssh.
Tags : ssh, server, cle, client, fichier
-
Commentaires
though?