Se connecter avec PuTTY sans mot de passe à l'aide d'une clé SSH présente plusieurs avantages, tant sur le plan de la sécurité que de la simplicité d'usage : suppression des mots de passe, authentification à deux facteurs, protection par phrase de passe, connexion automatisée et contrôle granulaire.
Note : une clé SSH n'a aucun lien avec un certificat SSL.
Le principe de connexion SSH (Secure Shell)
Le client, par exemple un utilisateur de PuTTY, initie une connexion au serveur SSH en indiquant l'adresse IP ou le nom de domaine, ainsi que le port utilisé, généralement le port 22.
Le serveur et le client négocient ensuite les protocoles de chiffrement destinés à sécuriser la connexion.
Authentification et échange des clés publiques : lors de la première connexion, le serveur transmet sa clé publique au client. Celui-ci peut l'accepter et l'ajouter à son fichier known_hosts afin de vérifier l'identité du serveur lors des connexions ultérieures.
Une fois la connexion sécurisée établie, le client doit s'authentifier auprès du serveur. Les méthodes les plus courantes sont l'utilisation d'un mot de passe ou d'une paire de clés, privée et publique. Dans ce second cas, la clé publique est déjà placée sur le serveur dans le fichier ~/.ssh/authorized_keys, tandis que le client s'authentifie à l'aide de la clé privée.
Établissement du canal sécurisé : une fois l'authentification validée, un tunnel chiffré est mis en place entre le client et le serveur. Toutes les données échangées via cette connexion sont chiffrées, ce qui garantit leur confidentialité et leur intégrité.
Configurer les clés SSH de connexion
# Installation de PuTTY https://www.putty.org
apt-get update && apt-get install openssh-client openssh-server
# Activer et démarrer le service SSH
systemctl enable ssh
systemctl start ssh
ssh-keygen # Générer une paire de clés RSA (publique et privée)
ssh-keygen -t rsa -b 4096 -m PEM -f ~/.ssh/id_rsa # sortie en format PEM (lisible par PuTTY)
cat ~/.ssh/id_rsa.pub # le "username@remote_host" se trouve à la fin de la clé publique
ssh-copy-id username@remote_host # Pour copier la clé publique vers le serveur
ssh username@remote_host # test la connexion
cat ~/.ssh/id_rsa # copier le contenu dans un fichier local "privatKey.txt"
# Renforcer la sécurité : désactiver l'authentification par mot de passe et changer le port 22
# utilisez un numéro compris entre 49152 et 65535
nano /etc/ssh/sshd_config
Dans /etc/ssh/sshd_config :
Port 49155
PasswordAuthentication no
PubkeyAuthentication yes
#ListenAddress 192.168.1.1
#ListenAddress 192.168.1.23
PermitRootLogin no
ChallengeResponseAuthentication no # mot de passe à usage unique
UsePAM yes # valider les connexions (limites CPU, mémoire, horaires, IP...) ; nécessaire avec UFW par user, Fail2Ban ou certaines politiques de sécurité
systemctl status ssh.service # contrôle la conf
systemctl restart sshd
ufw allow 49155/tcp
Cette commande génère par défaut une paire de clés RSA et demande où les stocker. Par convention, la clé privée est enregistrée dans ~/.ssh/id_rsa et la clé publique dans ~/.ssh/id_rsa.pub.
Remplacez username par votre nom d'utilisateur sur le serveur distant et remote_host par l'adresse IP ou le nom de domaine de votre serveur. Cette commande ajoute la clé publique au fichier ~/.ssh/authorized_keys du serveur distant.
Convertir la clé privée au format .ppk avec PuTTYgen
PuTTY utilise des fichiers de clé privée au format .ppk ; cette conversion est donc nécessaire pour établir une connexion avec cet outil. Convertissez votre clé privée, puis enregistrez-la dans un fichier privatKey.ppk.
Connexion à PuTTY sans mot de passe :
- Dans "Session", renseignez l'adresse du serveur distant (
remote_hostou l'IP). - Dans "Connection" > "Data" > "Auto-login username", indiquez le nom d'utilisateur
username. - Dans "Connection" > "SSH" > "Auth", cliquez sur "Browse", puis sélectionnez votre fichier
privatKey.ppk. - Revenez à "Session", puis enregistrez cette session sous un nom explicite.
Serveur Internet et RPC
Le RPC (Remote Procedure Call) est une technique qui permet à un programme d'exécuter une procédure, ou une méthode, à distance. Elle facilite la communication entre les différentes composantes d'une application distribuée.
- Automatisation des tâches administratives
- Surveillance et gestion à distance
- Configuration et déploiement centralisés
Certificats
Les principaux formats de certificats et de clés :
| Format | Extension(s) | Usage principal | Encodage |
|---|---|---|---|
| PEM | .pem, .crt, .cer, .key |
Certificats, clés publiques/privées, chaînes de certificats | Base64 |
| DER | .der, .crt, .cer |
Certificats, principalement sur les systèmes Windows | Binaire |
| PKCS#12 | .pfx, .p12 |
Stockage de certificats et de clés privées | Binaire |
| PKCS#7 | .p7b, .p7c |
Chaînes de certificats (sans clé privée) | Base64 ou Binaire |
| CER | .cer, .crt |
Certificat (clé publique uniquement) | PEM ou DER |
| CSR | .csr |
Demande de signature de certificat | Base64 (PEM) |
| OpenPGP | .asc, .gpg, .pgp |
Clés publiques/privées pour le chiffrement PGP | ASCII (asc), Binaire |
| JKS | .jks |
Stockage de certificats et de clés (Java KeyStore) | Binaire |
| SPC | .spc |
Certificats pour signer des logiciels | Binaire |
Certificats GPG
Les clés OpenPGP et les certificats X.509 ne reposent pas sur le même format. Il est possible de les exporter, mais pas de les convertir proprement avec openssl rsa comme s'il s'agissait de clés PEM/OpenSSL classiques.
gpg --full-generate-key # génère une nouvelle paire de clés GPG (GNU Privacy Guard)
gpg --list-keys # liste des certificats GPG
gpg --list-secret-keys # liste des certificats GPG secrets
# Exporter la clé publique au format ASCII
gpg --export --armor "nom@example.com" > publickey.asc
# Exporter la clé privée
gpg --export-secret-keys --armor "nom@example.com" > privatekey.asc
Suppression d'un certificat :
gpg --list-secret-keys
gpg --list-keys
# Exemple de sortie :
# pub rsa2048 2024-01-01 [SC]
# ABCD1234EFGH5678IJKL9012MNO34567PQR89STU
# uid [ultimate] Nom de l'utilisateur <email@example.com>
# sub rsa2048 2024-01-01 [E]
gpg --delete-key ABCD1234EFGH5678IJKL9012MNO34567PQR89STU
gpg --delete-secret-key ABCD1234EFGH5678IJKL9012MNO34567PQR89STU
Certificats avec OpenSSL
# Générer une paire de clés au format X.509 avec OpenSSL
openssl genpkey -algorithm RSA -out privatekey.pem -pkeyopt rsa_keygen_bits:2048
openssl genpkey -algorithm RSA -out privatekey.pem -pkeyopt rsa_keygen_bits:2048 -aes256
# Générer une clé publique à partir de la clé privée
openssl rsa -pubout -in privatekey.pem -out publickey.pem
# Vérifier la clé privée
openssl pkey -in privatekey.pem -check
# Générer une paire de clés et un certificat auto-signé
openssl genrsa -out privatekey.pem 2048
openssl req -new -x509 -key privatekey.pem -out certificate.pem -days 365
Exemple de réponses lors de la génération d'un certificat auto-signé :
Country Name (2 letter code) [AU]: FR
State or Province Name (full name) [Some-State]: Ile-de-France
Locality Name (eg, city) []: Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Lockness
Organizational Unit Name (eg, section) []: IT Lockness
Common Name (e.g. server FQDN or YOUR name) []: www.lockness-informatique.fr
Email Address []: contact@qmail.fr
Pour générer un fichier PKCS#12 (.pfx) regroupant la clé privée et le certificat :
openssl pkcs12 -export -out certificate.pfx -inkey privatekey.pem -in publickey.pem -certfile publickey.pem
La commande PKCS#12 attend un certificat X.509 dans -in, et non une simple clé publique. Utilisez donc le certificat généré précédemment :
openssl pkcs12 -export -out certificate.pfx -inkey privatekey.pem -in certificate.pem