Authentification SSH sans mot de passe avec une clé SSH de type RSA ou DSA

Nous naviguons à travers nos serveurs, ici, là bas, et au final, on se retrouve avec une ribambelle de mot de passe à retenir. La connexion par le biais du service SSH sur vos machines Unix/Linux (Debian 5 de préférence :D) sans mot de passe est devenu monnaie courante, voyons voir comment mettre en place ce type d'authentification.

But de ce billet

Vous en avez marre de vous authentifier à chaque fois sur votre serveur de production ou simplement sur votre ordinateur personnel ? Le service OpenSSH offre la possibilité de s'authentifier (et donc, se connecter) sans mot de passe, à l'aide des fameuses clés SSH de type RSA ou DSA.

Mise en situation

Afin de vous expliquer au mieux la démarche à suivre, voici un exemple concret.

Nous avons, un serveur (ou du moins, un ordinateur avec le service openssh-server allumé) que nous allons nommer "server". Sur ce serveur, nous avons un compte utilisateur, appelons le "user_server".

De l'autre côté, nous avons notre poste client, qui lui s'appelle "local". L'utilisateur sur le poste client s'appelle "user_local".

Configuration du service OpenSSH sur le serveur.

Votre serveur doit accepter l'authentification via des clés SSH.

Pour se faire, éditons la configuration du service OpenSSH. Un petit vi /etc/ssh/sshd_config. Nous vérifions que la ligne "AuthorizedKeysFile" est décommentée comme ci-dessous. Nous profitons de cette édition pour vérifier également que la permission de s'authentifier directement en "super utilisateur" est impossible via "AllowRootLogin" à "no" (Merci @rhaamo pour cet éclaircissement) Par défaut sous Debian, cette valeur est à "without-password"

user_server@server:~$ vi /etc/ssh/sshd_config

AuthorizedKeysFile     %h/.ssh/authorized_keys
AllowRootLogin no

Rechargeons notre configuration OpenSSH.

sudo /etc/init.d/ssh reload

La configuration du service OpenSSH étant maintenant terminée, Passons à la suite.

Création d'une clé SSH sur notre poste client.

Cette partie du billet ne vous sera utile que si vous ne disposez pas déjà d'une clé SSH. Si c'est le cas, passez à la partie suivante Installation de ma clé SSH publique sur le serveur., sinon, continuez la lecture ;-)

Pour générer une clé SSH, il existe plusieurs chiffrement dont 2 particulièrement RSA et DSA. Après nombreux commentaires à ce sujet, et en allant un peu plus loin, difficile de choisir quel est la meilleure "sécurité", DSA tire la couverture vers elle à en croire cette page (Merci à @rhaamo pour m'avoir averti des autres possibilités)

Créons une clé DSA.

ssh-keygen -t dsa

Il vous sera demandé si vous voulez appliquer une "passphrase" sur votre clé SSH. Si vous choisissez de ne pas renseigner cette "passphrase", alors, si jamais vous perdez votre clé, n'importe qui pourra se connecter sur vos différents serveurs. Il est très dangereux de laisser une clé sans "passphrase"

La génération faite, vous allez avoir 2 fichiers dans votre /home/user_local/.ssh/

  • id_dsa : Elle est la clé privée, ne jamais la divulguer.
  • id_dsa.pub : C'est la partie publique de votre clé SSH, c'est celle-ci qui nous intéresse.

Afin d'éviter de ne devoir retaper sa passphrase, il existe "ssh-keygen", voir la partie "SSH-AGENT" de la page Configurer et utiliser SSH

Installation de ma clé SSH publique sur le serveur.

Méthode automatisée

Rien de plus simple (Merci chatmoa), il existe une commande (ssh-copy-id) sur le poste client pour "directement" ajouter notre clé publique dans le fichier "~/.ssh/authorized_keys" de l'utilisateur visé. Attention tout de même, cette commande n'est pas disponible sur toutes les distributions. Présente sur RedHat/Debian et Ubuntu, mais pas sur les *BSD.(@rhaamo)

user_local@local: ~$ ssh-copy-id user_server@server

Après avoir renseigné notre mot de passe pour la dernière fois, la clé publique est copiée sur le compte utilisateur "user_server" du serveur.

Méthode manuelle

Pour commencer, nous allons transférer notre clé SSH publique sur le serveur.

scp /home/user_local/.ssh/id_rsa.pub user_server@server:/home/user_server/

Cette commande a pour but de copier la clé /home/user_local/.ssh/id_rsa.pub dans le répertoire /home/user_server du serveur. On va vous demander le mot de passe concernant l'utilisateur "user_server".

Connectons nous maintenant sur le serveur afin de créer le fichier ".ssh/authorized_keys".

ssh user_server@server

cat /home/user_server/id_rsa.pub >> /home/user_server/.ssh/authorized_keys

Faites bien attention aux droits du fichier "authorized_keys", en effet, si le fichier ne possède pas les bons droits (600), il se peut qu'il ne soit pas lu et donc, notre authentification par clé SSH ne fonctionnera pas. (Clin d'œil à Yop69 du Forum-Ubuntu)

Test de la configuration

Maintenant que tout est configuré, testons ensemble.

user_local@local:~ $ ssh user_server@server

Linux 2.6.26-1-amd64 #1 SMP Sat Jan 10 17:57:00 UTC 2009 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

user_server@server:~$

Petit TIP

Il se peut que le service OpenSSH ne soit pas sur le port par défaut (22), ce qui est d'ailleurs est une bonne chose, au vu des nombreux scanners de ports.

Votre service OpenSSH tourne sur le port 54000, vous n'avez plus à taper votre mot de passe (grâce aux clés SSH), mais vous devez spécifier le port à chaque connection SSH. Comme ci-dessous.

ssh user_server@server -p 54000

Pour configurer automatiquement toute connexion SSH à "server" sur le port 54000 en utilisant l'utilisateur user_server, ajoutez ceci dans ~/.ssh/config de votre poste client. (@than, merci pour ton commentaire)

Host server
Hostname server.domaine.fr
Port 54000
User user_sever

Et voilà, vous vous connecterez de la manière suivante maintenant.

ssh server

N'hésitez pas à me faire de vos remarques et de vos suggestions.

Bonne journée à tous.

Mickaël.

Vus : 2355
Publié par Mickaël : 9