Une fois le serveur OpenSSH installé, ouvrez le fichier /etc/ssh/sshd_config et décommentez les lignes suivantes :
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys
Redémarrez le serveur via la commande suivante :
Utilisateur$ /etc/init.d/ssh restart
Commencez par lancer la génération via la commande suivante :
Utilisateur$ ssh-keygen -t rsa -b 4096
Laissez le répertoire d'enregistrement des clés par défaut :
Generating public/private rsa key pair. Enter file in which to save the key (/home/test/.ssh/id_rsa): (Laissez par défaut et pressez Entrée)
Choisissez ensuite si vous désirez indiquer une phrase de passe pour votre clé.
Il s'agit là de faire un choix entre sécurité et simplicité : si vous ne choisissez pas de mot de passe, en cas de vol de votre clé privé, la personne aura un accès direct à vos serveurs, cependant entrer la phrase de passe à chaque fois peut s'avérer ennuyeux.
Ici nous choisirons de ne pas indiquer de mot de passe :
Created directory ‘/home/test/.ssh’. Enter passphrase (empty for no passphrase): (Laissez par défaut et pressez Entrée) Enter same passphrase again: (Laissez par défaut et pressez Entrée) our identification has been saved in /home/Utilisateur/.ssh/id_rsa. Your public key has been saved in /home/Utilisateur/.ssh/id_rsa.pub. The key fingerprint is: 95:05:13:a1:a4:71:27:fe:a0:2f:d7:4e:af:82:8a:a8 Utilisateur@serveur.com The key’s randomart image is: +–[ RSA 4096]—-+ | . + *+. | | * + + | | . + o | | . + | | . S . | | . . | | ..o o | | . . .o.o . | |E . .. .o.. | +————-----—–---+
Envoyez votre clé publique sur le serveur OpenSSH:
Utilisateur$ scp ~/.ssh/id_rsa.pub Utilisateur@serveur.com:~/clePublique
Entrez ensuite cette clé dans le fichier authorize_keys sur le serveur OpenSSH:
Utilisateur$ touch ~/.ssh/authorized_keys Utilisateur$ cat clePublique >> ~/.ssh/authorized_keys
Commencez par télécharger PuttyGen ici, il s'agit de l'outil de génération de clé.
Lancez PuttyGen et générez une clé de type SSH2-RSA et d'une taille de 4096 bits, puis enregistrez les deux clés où vous le souhaitez (Mes Documents par exemple)
Téléchargez WinSCP ici, puis installez le.
Envoyez la clé publique générée sur le serveur OpenSSH, placez la dans le répertoire home de l'utilisateur sur lequel se connecter. Le client WinSCP fonctionne comme la majorité des clients FTP graphique connus, je ne vais donc pas détailler son utilisation.
Entrez ensuite cette clé dans le fichier authorize_keys sur le serveur OpenSSH:
Utilisateur$ ssh-keygen -i -g ~/clePublique > ~/clePubliqueOpenSSH Utilisateur$ touch ~/.ssh/authorized_keys Utilisateur$ cat clePubliqueOpenSSH >> ~/.ssh/authorized_keys
Lancez PuttyGen, cliquez sur “Load”, Sélectionnez votre clé privée précédemment générée pour Windows. Cliquez sur l'onglet “Conversion”, cliquez sur “Export Openssh key”. Nommez la clé nomdelaclé.ssh
Vous pouvez vous connecter tout simplement ainsi:
Utilisateur$ ssh Utilisateur@serveur.com
OpenSSH ne vous demandera pas de mot de passe.
Lancez PuttySSH, allez dans Connections/SSH/Auth et cliquez sur “Browse”, puis choisissez votre clé privée.
Allez ensuite dans Session puis indiquez l’adresse du serveur, et cliquez sur Open.
Vous voilà connecté.
Sur le serveur OpenSSH, ouvrez de nouveau le fichier /etc/ssh/sshd_config et indiquez que vous n’autorisez plus la connexion par mot de passe :
PasswordAuthentication no
Redémarrez enfin le serveur OpenSSH:
Utilisateur$ /etc/init.d/ssh restart
Vous avez terminé, attention cependant à ne pas perdre votre clé privée.
Si la connexion freeze après un certain temps d'inactivité, ajoutez les deux lignes suivantes au fichier de configuration du serveur SSH. Les valeurs peuvent être ajustée.
ClientAliveInterval 5 ClientAliveCountMax 2
#Authoriser l'accès seulement à: utilisateur1 utilisateur2 AllowUsers utilisateur1 utilisateur2 #Authoriser l'accès seulement aux groupes d'utilisateurs: groupe1 groupe2 AllowGroups groupe1 groupe2 #Interdire l'accès en direct au compte root PermitRootLogin no
Le programme ssh-keygen permet de changer la passphrase associée à un couple clé privée/publique :
utilisateur $ ssh-keygen -p [--P old_passphrase] [-N new_passphrase] -f keyfile
Si (old|new)_passphrase ne sont pas donnée, ils seront demandés à l'utilisateur par un prompt.
Lorsque vous êtes l'administrateur de la machine et qu'elle est déjà configurée pour n'accepter que les passphrases, l'utilisation de ssh-copy-id n'est pas possible pour ajouter une clé à un autre utilisateur. En utilisant un compte disposant de suffisemment de droits, il est possible d'utiliser :
cat id_xxx.pub | ssh admin_user@domain "cat - >> /home/new_ssh_user/.ssh/authorized_keys"
Si jamais une clé a été compromise et que l'on souhaite la révoquer, openssh n'offre pas de fonctionnalité telle que l'usage de clé de révocation. Il faudra donc se connecter sur le serveur et ajouter la clé publique de la paire de clés compromises dans un fichier tenant lieu de liste de révocation.
Ajout à la configuration de sshd (/etc/ssh/sshd_config) :
RevokedKeys %h/.ssh/revokedKeys
Ajout d'une clé à la liste de révocation (sur le serveur) :
cat id_rsa.pub >> ~/.ssh/revokedKeys
Afin de ne pas avoir à ajouter une nouvelle clé dans le fichier authorized_keys à chaque fois que l'on souhaite ajouter un nouveau client ssh, ou pire de dupliquer une seule clé privée sur plusieurs pc, il est possible d'utiliser des certificats. Le principe consiste à créer une autorité de certification (en l'occurence une paire de clé ssh). La clé privée de l'autorité servira à signer des clés publiques de client. La clé publique de l'autorité de certification servira sur le serveur à vérifier l'identité des clients (par le biais de la vérification de la signature).
Génération des clés de l'autorité de certification :
ssh-keygen -t rsa -f cert_key
Positionnement de la clé publique de l'autorité de certification sur le serveur :
cat cert_key.pub >> ~/.ssh/trustedUserCAKeys
Ajouter les lignes suivantes à sshd :
TrustedUserCAKeys %h/.ssh/trustedUserCAKeys AuthorizedPrincipalsFile %h/.ssh/authorizedPrincipalsFile
Le fichier 'authorizedPrincipalsFile' contient le(s) nom(s) d'utilisateur(s) qui doivent être associé à un certificat pour que celui-ci soit valide. Par exemple :
yod_maison yod_boulot
Signature de la clé publique d'un utilisateur :
ssh-keygen -s cert_key -I identifiant_de_ma_cle -n yod_boulot user_key.pub
Le fichier de certificat ainsi généré sera 'user_key-cert.pub'. A noter qu'il est possible, voir recommandé de limiter la durée de validité d'un certificat (option -V de ssh-keygen).
configuration du fichier ~/.ssh/config sur le pc de l'utilisateur :
Host testssh User yod Hostname 192.168.0.10 PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa
Connection au serveur :
ssh testssh
Ainsi, la configuration du serveur ne changera plus tant que la clé de l'autorité de certification ne change pas. Et il suffit de signer la clé publique de tout nouveau client pour lui permettre l'accès au serveur.
TODO : c'est sensiblement la même chose que pour l'authentification du client, hormis l'utilisation de l'option -h de ssh-keygen pour la signature de la clé publique du serveur, et le fait que le nom du serveur (monserveur.mondomaine.fr) doit faire parti des nom d'utilisateurs paramétrés pour le certificat (a défaut de nom, il faut utiliser l'adresse ip du serveur).