====== Configuration de base du serveur ====== 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 ====== Génération et positionnement des clés sous Linux & Mac ====== 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 ====== Génération et positionnement des clés sous Windows avec PuttyGen et WinSCP ====== Commencez par télécharger PuttyGen [[http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html|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 [[http://winscp.net/eng/download.php|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 ====== Conversion d'une clé Windows pour Linux ====== 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 ====== Connexion via les clients Linux & Mac ====== Vous pouvez vous connecter tout simplement ainsi: Utilisateur$ ssh Utilisateur@serveur.com OpenSSH ne vous demandera pas de mot de passe. ====== Connexion sous Windows via Putty ====== 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é. ====== Suppression de la connexion par mot de passe sur le serveur ====== 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. ====== Administration ====== ===== Le terminal freeze régulièrement ===== 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 ===== Les restrictions d'accès ===== #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 ===== Changer une passphrase ===== 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. ===== Ajouter un utilisateur ===== 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" ===== Révoquer une clé compromise ===== 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 ====== Utilisation de certificats d'authentification ====== ===== Authentification du client ===== 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. ===== Authentification du 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). ====== Biblio ====== * Considérations de sécurité sur openSsh : [[http://www.ssi.gouv.fr/uploads/IMG/pdf/NP_OpenSSH_NoteTech.pdf]]