Connexion à un serveur sans mot de passe

 

Un administrateur système se connecte au quotidien a des dizaines de serveurs. Par sécurité chaque serveur dispose d'un mot de passe root unique, et surtout la connexion est interdite à l'utilisateur root (principes de base de sécurité ssh). Pour éviter de devoir taper son mot de passe à chaque fois que l'on veut se connecter à un serveur par ssh, on va utiliser nos clés ssh pour se connecter à ces serveurs.

Création d'une clé ssh

La première étape consiste à se créer une clé ssh si vous n'en avez pas déjà une. Il est existe deux protocoles pour les clés ssh, RSA et DSA. Si le dimensionnement de la clé est important, les deux protocoles sont aussi sécurisés l'un que l'autre. Nous allons créer une clé RSA de 2048 bits. Création du répertoire .ssh pour l'utilisateur :

$ mkdir -m 700 .ssh

Création de la clé :

$ ssh-keygen -b 2048 -t rsa -N "" -C 'commentaire' -f .ssh/nom_de_la_cle

On crée une clé de rsa de 2048 bits sans passphrase (-N "")  avec un commentaire pour la reconnaître et nom. On se retrouve donc avec deux fichier : .ssh/nom_de_la_cle la clé privée .ssh/nom_de_la_cle.pub la clé publique. Attention bien sur de ne pas diffuser et perdre votre clé privée.

Paramétrer le serveur pour accepter la clé

Copie de la clé sur le serveur :

$ ssh-copy-id -i .ssh/nom_de_la_cle.pub  sysadmin@192.168.1.203

En supposant que vous avez un accès ssh avec mot de passe sur ce serveur avec le compte sysadmin. Côté serveur, il va falloir maintenant dire qu'on autorise les connexions avec cette clé. Pour cela on va copier le contenu de la clé publique dans un fichier. Si par exemple on veut autoriser cette clé pour se connecter sur ce serveur avec le compte root :

# cat nom_de_la_cle.pub > /root/.ssh/authorized_keys2

Effacer ensuite le fichier nom_de_la_cle.pub. Pour que le serveur accepte une connexion root avec clé, il faut paramétrer l'option PermitRootLogin avec le paramètre without-password, ce qui permet de dire qu'on refuse les connexions ssh de l'utilisateur root sauf celles par clé ssh.

Se connecter au serveur

Tester la connexion avec la clé

$ ssh -i .ssh/nom_de_la_cle root@192.168.1.203

Remarquez bien qu'on utilise ici la clé privée pour se connecter.

Se simplifier la vie

Il peut rapidement devenir contraignant de se souvenir de la clé à utiliser pour tel ou tel serveur, par exemple j'administre des serveurs pour mon entreprise et donc j'ai une clé ssh pour cela, ensuite j'administre des serveurs pour moi et j'ai une autre clé ssh, enfin j'administre des serveurs pour un ami et j'ai une troisième clé pour cela. On va donc se simplifier la vie avec la fichier .ssh/config Dans ce fichier on va retrouver des blocs de données comme celui-ci :

host tatayoyo
hostname=tatayoyo.domaine.tld
user=sysadmin
identityfile=/home/guidtz/.ssh/id_rsa_travail
compression yes
protocol 2
port 2223
batchmode yes
setuptimeout 200
StrictHostKeyChecking no
CheckHostIP no
ConnectionAttempts 100
ConnectTimeout 120
PasswordAuthentication no
ServerAliveInterval 30
ServerAliveCountMax 20

Les paramètres qui vont varier sont les suivants :

  • host : un identifiant simple à se rappeler pour cette machine
  • hostname : le nom dns de la machine sur laquelle vous allez vous connecter
  • user : l'utilisateur avec lequel vous allez vous connecter sur la machine cible
  • identityfile : la partie privée de la clé à utiliser
  • port : le port ssh du serveur sur lequel vous allez vous connecter

Maintenant pour me connecter sur le serveur tatayoyo :

$ ssh tatayoyo

Simple,direct,efficace.